Autor Thema: SQL Abfrage in LS  (Gelesen 1367 mal)

Offline chris2212

  • Aktives Mitglied
  • ***
  • Beiträge: 162
  • Geschlecht: Männlich
SQL Abfrage in LS
« 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

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:SQL Abfrage in LS
« Antwort #1 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
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline chris2212

  • Aktives Mitglied
  • ***
  • Beiträge: 162
  • Geschlecht: Männlich
Re:SQL Abfrage in LS
« Antwort #2 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:SQL Abfrage in LS
« Antwort #3 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

Offline bml

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Männlich
  • Warum immer ich ??
Re:SQL Abfrage in LS
« Antwort #4 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ß
1 Dom-Serv AS/400 (6.5.3)
6 Dom-Serv W2K (6.5.3)   
2 Dom-Serv RedHat
1000 Clients (5.0.11 - 6.5.3)
1 Entwickler (6.5.3) - ICH

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:SQL Abfrage in LS
« Antwort #5 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

Offline chris2212

  • Aktives Mitglied
  • ***
  • Beiträge: 162
  • Geschlecht: Männlich
Re:SQL Abfrage in LS
« Antwort #6 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

Hernan Cortez

  • Gast
Re:SQL Abfrage in LS
« Antwort #7 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 & |"|

sollte auch gehen.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz