Werte aus SQL-Strings mathematisch berechnen

Habe da noch was!

Ich habe folgende SQL-Strings:
SQL4 = „SELECT lMeasuredVariableID FROM tblPidItem WHERE lID=“ & DataGrid1.SelBookmarks.Item(0)
SQL5 = „SELECT dScaleMinimum from tblAnalogItem WHERE lID=(“ & SQL4 & „)ORDER BY lID“
SQL6 = „SELECT dScaleMaximum from tblAnalogItem WHERE lID=(“ & SQL4 & „)ORDER BY lID“
SQL7 = „SELECT lPricition from tblAnalogItem WHERE lID=(“ & SQL4 & „)ORDER BY lID“[/code]
Wie kann ich die Werte aus den Felder der Datenbank mathematisch bearbeiten? Ich möchte die Werte aus SQL5 und SQL6 durch SQL7 teilen. Ich bekomme es aber nur hin, mir die Werte in einem DataGrid anzeigen zu lassen, aber mit der Berechnung klappt das nicht.

Danke

Hallo Axel,

was mir auffaellt das die SQL Statements unschoen geschrieben sind und teilweise Fehler unterliegen. Ich mache es mal anders,einfacher und schneller :smile:

Dim Sql as String
 Sql="Select dScaleMinimum,dScaleMaximum,lPricition From tblAnalogItem Where lID IN(SELECT lMeasuredVariableID FROM tblPidItem WHERE lID='"
& DataGrid1.SelBookmarks.Item(0) & "') ORDER BY lID;"

Somit hast du deine ganzen Abfragen zusammen in eine Gepackt :smile:

Ich weiss ja nicht wie du auf deine DB zugreifst, aber ich gehe mal von ADO aus. Dazu müsstest du es dann wiefolgt machen.

Private CON as ADODB.Connection
Private RS as New ADODB.Recordset

Public Function FileExists(datei As String) As Boolean
On Error Resume Next
 FileExists = Dir$(datei) ""
 FileExists = FileExists And Err = 0
 On Error GoTo 0
End Function

Public Function OpenDatabase(Filename As String,SQL as String) As Boolean 'Öffnet die DB
On Error GoTo ErrHandler
 If Not (FileExists(Filename)) Then Err.Raise 13
 Set Con = New ADODB.Connection
 With Con
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .CursorLocation = adUseClient
 .Properties("Data Source") = Filename
 .Mode = adModeReadWrite
 .Open
 RS.CursorType = adOpenKeyset
 RS.LockType = adLockOptimistic
 RS.Open SQL, Con, adOpenDynamic, adLockOptimistic
 End With
 OpenDatabase = True
 Exit Function
ErrHandler:
End Function

So durch Aufruf der Function Opendatabase kannst du nun die DB öffnen. Du musst ihr lediglich das SQL Statement mit übergeben :wink:
Achte dabei aber darauf das sie nicht schon vorher geöffnet ist :smile:
Aber das ist nur ein Demo zu veranschaulichung.

Rechnen kannst du nun wiefolgt mit den Werten

Private Sub Berechne
On Error Resume Next
Dim Sql as String
 Sql="Select dScaleMinimum,dScaleMaximum,lPricition From tblAnalogItem Where lID IN(SELECT lMeasuredVariableID FROM tblPidItem WHERE lID='"
& DataGrid1.SelBookmarks.Item(0) & "') ORDER BY lID;"
if not(OpenDatabase("c:\DeineDatenbank.mdb",sql)) then
 'Fehler DB konnte nicht geöffnet werden
 Exit Sub
else
 'Datenbank ist geöffnet
if RS.recordcount=0 then
 'Keine Datensätze vorhanden
else
 'Datensätze vorhanden!
 RS.Movefirst 'Ersten Datensatz selektieren!
 Do While Not RS.Eof
 'hier rechnen
 msgbox rs!Feldname1 / rs!Feldname3
 msgbox rs!Feldname2 / rs!Feldname2
 rs.movenext
 loop
end if
end if 

Du musst hier lediglich die Feldnamen ersetzen.
In dem Falle wäre
Feldname1 das Feld in der Tabelle dScaleMinimum mit dem du rechnen magst
Feldname2 das Feld in der Tabelle dScaleMaximum mit dem du rechnen willst
Feldname 3 das Feld in der Tabelle lPricition mit dem du rechnen magst

So ich hoffe ich konnte dir helfen :smile:

Da ich das alles nun aus dem Kopf getippelt habe und nicht getestet, koennte es evtl. sein das sich der eine oder andere kleine Fehler eingeschlichen hat. Aber das prinzip solltet du erkennen :smile:

MfG Alex