Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: chris2212 am 19.05.04 - 12:01:10
Titel: SQL Abfrage in LS
Beitrag von: chris2212 am 19.05.04 - 12:01:10
Hallo,
aus einer ForeCast Datenbank sollen alle Dokumente einer View in eine Access Datenbank exportiert werden.
Dies soll auf zwei Arten erfolgen
1; Die vorhandene Access-DB soll mit einem Zeit-Stempel vorher gesichert und neu erstellt werden, anschl. sollen alle Daten in die neu erstellte Access-DB exportiert werden.
2; Die Dokumente der Notes-View sollen an die vorhandene Access-DB "angehängt" werden. Dazu muss ich vorher prüfen ob es das "Dokument" bzw. ob es den DS in Access bereits gibt. Wenn ja, möchte/muss ich den bereits vorhandenen DS in der Access DB löschen und neu erstellen, weil ich ja nicht weis ob das Dokument seit dem letzten export verändert wurde oder nicht.
Die Dokumente (DS) die es in der Access DB noch nicht gibt werden "normal" exportiert.
OK :P
ich hoffe das ist soweit verständlich :-[
1; Hab ich :-) funktioniert auch ohne Probleme
Aber bei 2; weis ich nicht mehr weiter. Ich wollte anhand der DocID prüfen ob es das Dokument bzw. den DS in Access schon gibt, aber ich bekomme bei SetParameter im Debugger immer False zurück. Laut Online-Doku findet er demnach den ParameterNamen oder den Index nicht.
Was mach ich da falsch? Den geb ich ihm doch....
Für jede Unterstützung dankbar !!!!
anbei der letzte Versuch.......
Dim session As New NotesSession Dim db As NotesDatabase Dim col As NotesDocumentCollection Dim doc As NotesDocument
Set db = session.CurrentDatabase Set col = db.UnprocessedDocuments Set doc = col.GetFirstDocument
Dim con As New ODBCConnection Dim qry As New ODBCQuery Dim result As New ODBCResultSet
con.ConnectTo("ForeCast") Set qry.Connection = con Set result.Query = qry
Dim strID As String strID = doc.UniversalID Dim defaultQuery As String defaultQuery = "'SELECT DocID FROM ForeCast WHERE DocID=strID'" qry.SQL = defaultQuery
strResult = result.SetParameter(DocID,strID)
:'(
Gruß Christian
Titel: Re:SQL Abfrage in LS
Beitrag von: animate am 19.05.04 - 12:09:31
Zitat
defaultQuery = "'SELECT DocID FROM ForeCast WHERE DocID=strID'"
kein Ahnung, obs damit was zu tun hat, aber mit dieser Abfrage dürftest du keinen Treffer bekommen.
du musst deine statische Zeichenkette mit einer variablen verknüpfen
defaultQuery = "'SELECT DocID FROM ForeCast WHERE DocID=" & strID
oder so
Titel: Re:SQL Abfrage in LS
Beitrag von: chris2212 am 19.05.04 - 12:47:30
Hallo Thomas,
ich hab´s entsprechend abgeändert.
defaultQuery = "'SELECT DocID FROM ForeCast WHERE DocID = " & strID &"'"
Im Debugger sieht es so aus... "'SELECT DocID FROM ForeCast WHERE DocID = 856D011627615741C1256E970050F8D5'"
ResultSet wird im Debugger leider wieder auf False gesetzt.
Ich habe auch schon versucht mir mit GetParameterName den Namen ausgeben zu lassen, aber wenn´s bei Set schon False ist bekomme ich bei GetParameterName nen LeerString zurück :'(
Füe jeden Tipp dankbar !
Gruß Christian
Titel: Re:SQL Abfrage in LS
Beitrag von: koehlerbv am 19.05.04 - 12:55:00
Hier scheinen aber die Datentypen für das SQL-Statement arg durcheinander gekommen zu sein. So auf die Schnelle - müsste es nicht heissen:
defaultQuery = "SELECT DocID FROM ForeCast WHERE DocID=" & {"} & strID & {"}
HTH, Bernhard
Titel: Re:SQL Abfrage in LS
Beitrag von: bml am 19.05.04 - 13:07:45
wenn ich mir dein Code so anschaue
liegt der Fehler darin, dass die UNID, ist nach meinem Wissen ein stringvalue ist und du ein integer daraus machst.
Ich arbeiter auch mit SQL und bin auch schon öfter auf die Nase gefallen.
Dein SQL müsste so aussehen: " SELECT DocID FROM ForeCast WHERE DocID = '856D011627615741C1256E970050F8D5' "
Hoffe ich konnte dir helfen Gruß
Titel: Re:SQL Abfrage in LS
Beitrag von: koehlerbv am 19.05.04 - 13:17:36
Jo, da habe ich auch zu schnell geschrieben - hier die korrigierte Fassung:
defaultQuery = "SELECT DocID FROM ForeCast WHERE DocID='" & strID & "'"
Bernhard
Titel: Re:SQL Abfrage in LS
Beitrag von: chris2212 am 19.05.04 - 14:09:20
:D :D Danke :D :D
Jetzt geht´s
Hier der Source (falls jemand ein ähnliche "Problem"" hat)
******************************************************* Dim session As New NotesSession Dim db As NotesDatabase Dim col As NotesDocumentCollection Dim doc As NotesDocument
Set db = session.CurrentDatabase Set col = db.UnprocessedDocuments Set doc = col.GetFirstDocument
Dim con As New ODBCConnection Dim qry As New ODBCQuery Dim result As New ODBCResultSet
Dim strID As String
con.ConnectTo("ForeCast") Set qry.Connection = con Set result.Query = qry
While Not(doc Is Nothing) strID = doc.UniversalID qry.SQL = "SELECT DocID FROM ForeCast WHERE DocID='" & strID & "'" result.Execute If result.IsResultSetAvailable Then Msgbox strID & " exists in ForeCast" Else Msgbox strID & " does not exist in ForeCast" End If Set doc = col.GetNextDocument(doc) Wend result.Close(DB_CLOSE) con.Disconnect *******************************************************
Danke für die schnelle Hilfe !
Gruß Christian
Titel: Re:SQL Abfrage in LS
Beitrag von: Hernan Cortez am 19.05.04 - 15:43:07
In LotusScript finde ich bei krud koncetanierten (oder wie das heisst) Gänsefüsschen das Pipe Zeichen als String-delimiter(?) immer am übersichtlichtesten:
Code
defaultQuery = |SELECT DocID FROM ForeCast WHERE DocID="| & strID & |"|