Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как заменить имя поля на его значение?....
 
 автор: lurix   (05.11.2008 в 14:32)   личное сообщение
 
 

Есть несколько полей, названных a,b,c (их значения соответственно 2, 3, 1).
Есть 4-е (текстовое) поле, в котором введены данные (например a+b-с).

Необходимо в 5-м поле вывести то же выражение, но с данными (чтобы получилось 2+3-1)...
Народ, подскажите, как это реализовать...

  Ответить  
 
 автор: Lukas   (05.11.2008 в 15:08)   личное сообщение
 
 

Может как-то так, модуль формы:

Private Function funResultat(Formula As String)
    Dim strLitera As String
    Dim i As Integer
    Dim strResultat As String
    If Len(Formula) > 0 Then
        For i = 1 To Len(Formula)
            strLitera = Mid(Formula, i, 1)
            If funIsField(strLitera) Then
                strResultat = strResultat & Me.Controls(strLitera)
            Else
                strResultat = strResultat & strLitera
            End If
        Next i
        funResultat = strResultat
    Else
        funResultat = vbNullString
    End If
End Function

Private Function funIsField(strLitera As String) As Boolean
    On Error Resume Next
    funIsField = Not Me.Controls(strLitera) Is Nothing
End Function


Private Function funCalculation()
    Dim strResultat As String
    strResultat = funResultat(Nz(Me.Formula, vbNullString))
    If Len(strResultat) > 0 Then
        Me.Resultat = strResultat
        Me.ResultatValue = Eval(strResultat)
    End If
End Function

Private Sub a_AfterUpdate()
    funCalculation
End Sub

Private Sub b_AfterUpdate()
    funCalculation
End Sub

Private Sub c_AfterUpdate()
    funCalculation
End Sub

Private Sub Formula_AfterUpdate()
    funCalculation
End Sub

  Ответить  
 
 автор: Lukas   (05.11.2008 в 15:50)   личное сообщение
 
 

Или запросом с функцией:

SELECT tbl1.ID, tbl1.a, tbl1.b, tbl1.c, tbl1.Formula, funResultat(tbl1.a, tbl1.b, tbl1.c, tbl1.Formula) AS Resultat
FROM tbl1;

Public Function funResultat(aValue, bValue, cValue, strFormula As String) As String
    Dim strLitera As String
    Dim i As Integer
    Dim strResultat As String
    
    If Len(strFormula) > 0 Then
        For i = 1 To Len(strFormula)
            strLitera = Mid(strFormula, i, 1)
            
                Select Case strLitera
                    Case Is = "a"
                        strResultat = strResultat & aValue
                    Case Is = "b"
                        strResultat = strResultat & bValue
                    Case Is = "c"
                        strResultat = strResultat & cValue
                    Case Else
                        strResultat = strResultat & strLitera
                End Select
        Next i
        funResultat = strResultat
    Else
        funResultat = vbNullString
    End If
End Function

  Ответить  
 
 автор: lurix   (05.11.2008 в 16:49)   личное сообщение
 
 

чтобы я без Вас делала!!!!!!!!!!!!!!!!!!!!!!!!!!!!! огромнейшее спасибо!!!!!! получилось!!!!!!!!!!!!!!!!

  Ответить  
 
 автор: Lukas   (05.11.2008 в 17:51)   личное сообщение
 
 

Если немного изменить функцию, она будет возвращать не строку, а результат выражения:

Public Function funResultat(aValue, bValue, cValue, strFormula As String)
    Dim strLitera As String
    Dim i As Integer
    Dim strResultat As String
    
    If Len(strFormula) > 0 Then
        For i = 1 To Len(strFormula)
            strLitera = Mid(strFormula, i, 1)
            
                Select Case strLitera
                    Case Is = "a"
                        strResultat = strResultat & aValue
                    Case Is = "b"
                        strResultat = strResultat & bValue
                    Case Is = "c"
                        strResultat = strResultat & cValue
                    Case Else
                        strResultat = strResultat & strLitera
                End Select
        Next i
        funResultat = Eval(strResultat)
    Else
        funResultat = 0
    End If
End Function

Обрабатывает так-же скобки и возведение в степень.

  Ответить  
 
 автор: lurix   (05.11.2008 в 17:54)   личное сообщение
 
 

елки зеленые..... это же именно то, что нужно было!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!

  Ответить  
 
 автор: Lukas   (05.11.2008 в 18:00)   личное сообщение
 
 

Всегда рады.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList