Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: MisterDa am 01.04.03 - 11:43:54

Titel: ODBC Problem
Beitrag von: MisterDa am 01.04.03 - 11:43:54
Hallo Leute,

ich habe ein Problem mit ODBC.
Und zwar: Ich will aus einer Access DB eine Spalte auslesen und die Werte in einer Dialogliste zur Auswahl stellen. Jetzt habe ich die Access DB im ODBC Manager unter System-DSN registriert und will mit dem @dbColumn(ODBC) Befehl darauf zugreifen. Es kommt aber ständig der Fehler "Der benötigte externe Datenbanktreiber kann nicht gefunden werden"

Formel: @DbColumn("OBDC";"RekDB2";"";"";"Gerät";"SNr")

Was mache ich falsch?

Thx

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 01.04.03 - 11:53:46
... die Fehlermeldung weist darauf hin, daß dir der ODBC-Treiber für deine externe Datenbank fehlt / nicht instaliert ist...

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 01.04.03 - 12:04:21
ja schon, aber wenn ich doch meinen Treiber beim ODBC Manager auswählen kann für die DB und es keine Fehlermeldung gibt, dann geh ich davon aus, dass er auch installiert ist...

...oder seh ich das falsch?  ???

und wenn ich nachschaue im Manager, zeigt er mir auch den Namen des Treibers an, der (angeblich) installiert sein soll...
("Microsoft Access Driver (*.mdb)")

(Sorry falls das Thema weng von Notes abweicht..)

MisterDa
Titel: Re:ODBC Problem
Beitrag von: Rob Green am 01.04.03 - 12:08:19
lt. Help:
Wenn die Datei NOTES.INI des Benutzers die Anweisung
NoExternalApps=1
enthält, wird die Formel @DbColumn Formel deaktiviert. Der Benutzer sieht keine Fehlermeldung; die Formel wird ignoriert. Dies gilt nur dann für @DbColumn, wenn Sie diese Formel in Verbindung mit ODBC verwenden.

Dürfte aber an sich kein fehler kommen dann.

Dann die Syntax:
@DbColumn("ODBC" : "NoCache" ; Datenquelle ; Benutzer-ID1 : Benutzer-ID2 ;  Kennwort1  : Kennwort2  ; Tabelle  ; Spalte  : Nullwertebehandlung  ; "Distinct"  : Sortieren )

check nochmals punkt für punkt.
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 01.04.03 - 12:24:53
Thx. hab ich alles gemacht..
Die Zeile steht nich in der Notes.ini und den Befehl hab ich auch noch mehrmals überprüft...(allerdings immer ohne user bzw pw):

@DbColumn("OBDC":"No Cache";"RekDB2";"";"";"Gerät";"SNr":"Discard";"Distinct":"Ascending" )

kommt immernoch der gleiche Fehler in der Dialogliste..

wenn ich allerdings ein Lotus Skript aus der Hilfe ausführe, dann sagt er, "Connected to RekDB2"...es kann also nich am ODBC Treiber liegen oder?   ???

Hier das Skript..:

Uselsx "*LSXODBC"
Sub Initialize
     Dim con As New ODBCConnection
     con.ConnectTo(Inputbox("ODBC data source name", "DSN"))
     While Not con.IsConnected
          dsn = Inputbox("ODBC data source name", _
          "Connection not made ...")
          If dsn = "" Then Exit Sub
          con.ConnectTo(dsn)
     Wend
     Messagebox "Connected to " & con.DataSourceName,, _
     "Connection made ..."
     con.Disconnect
End Sub

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 01.04.03 - 15:14:58
... für die unterschiedlichen ACCESS-Versionen gibt es unterschiedliche Treiber - überprüfe die Version - wäre noch ein möglicher Ansatz...

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 02.04.03 - 07:49:22
hab ich schon gemacht, hab auch die neuesten runtergeladen und installiert..hat aber leider nix gebracht...  :-\
Titel: Re:ODBC Problem
Beitrag von: ata am 02.04.03 - 14:34:05
... da fällt mir so aus der Distanz nichts mehr dazu ein...

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 02.04.03 - 15:01:56
schade...

aber das was mich eben verwirrt ist, dass ich über das unten dargestellte Skript ohne Probleme eine Verbindung herstellen kann..nur wenn ich die Formel in die Dialogliste eingebe, will er nicht...wenns an ODBC läge, würde es beim Skript ja auch nicht gehen, oder seh ich das falsch?

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 02.04.03 - 17:09:14
... wenn Script den Treiber verwenden kann, dann sollte die Formel ebenso damit umgehen können....

... was spricht den gegen Script?

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 03.04.03 - 07:18:12
1. das soll ja zu einer Auswahl an vorgegebenen Werten führen, die ich in einer Dialogliste vorgeben möchte..kann man da überhaupt mit skript arbeiten..ich seh da nur das Formelfenster..(bin wie gesagt neu in Notes ::) )
2. hab ich bisher mit Script keine Erfahrung...

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 03.04.03 - 07:50:30
... du kannst das auch mit LotusScript machen. Die Werte werden dann in ein Mehrfachwertefeld geschrieben. Dein Auswahlfeld zieht sich die Liste dann von diesem Feld...

... in LS lässt es sich besser kontrollieren, was für Werte kommen...
... Formel ist performanter..

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 03.04.03 - 08:15:44
nur leider hab ich von LS noch überhaupt keine Ahnung..   :(

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 03.04.03 - 08:39:16
... ich habe auf meiner Homepage das Grundgerüst für LotusScript beschrieben...

... hast du den Grunderfahrung in LotusScript / Basic?

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 03.04.03 - 08:47:48
hab im Zusammenhang mit Access ein wenig mit Visual Basic gearbeitet...da gibts ja Ähnlichkeiten..

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 03.04.03 - 08:52:06
... LotusScript ist ein Deriwat von VisualBasic - zwar nicht von der neuesten Version - aber brauchbar...

... schau dir das Grundgerüst dort mal an, du findest es unter

http://www.anton-tauscher.de/LotusScript (http://www.anton-tauscher.de/LotusScript)

... im Menü unter Datenbanken | Datenbanken | ODBC-Grundgerüst

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 03.04.03 - 09:08:26
jo danke. bin grad dabei. an der stelle mal ein Lob an deine Homepage. Sowas bräuchte man öfters..

MisterDa
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 03.04.03 - 10:44:46
gut. die Verbindung steht und er liest auch die richtigen Werte aus...


"Die Werte werden dann in ein Mehrfachwertefeld geschrieben. Dein Auswahlfeld zieht sich die Liste dann von diesem Feld..."

Wie funktioniert das dann?

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 03.04.03 - 10:45:22
... danke für das Kompliment - leider immer noch ne Baustelle...

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 03.04.03 - 13:23:34
Zitat
Die Werte werden dann in ein Mehrfachwertefeld geschrieben. Dein Auswahlfeld zieht sich die Liste dann von diesem Feld...

kann mir das noch bitte einer erklären wie sowas funktioniert?

Danke

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 03.04.03 - 14:20:46
... wenn du die Werte in einem Array hast, dann kannst du die Werte zum Beispiel wie folgt einem Feld zuweisen

NotesDocument.Feldname = DeinArray

... damit sind die Werte in deinem MultipleValue-Feld
Auf dieses Feld bezieht sich deine Auswahliste. Als Formel verwendest du den Feldnamen...

... eventuell benötigst du noch einen Refresh, damit die Liste aktuell verwendet werden kann...

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 04.04.03 - 08:40:54
also, ich bin jetzt soweit, dass ich alle Daten in meinem Feld hab, jetzt versteh ich nicht das weitere Vorgehen, bzw. weis nicht was oder wie ich das anstellen soll..

Sub Entering(Source As Field)
   
   Dim Con As New ODBCConnection
   Dim Qry As New ODBCQuery
   Dim Res As New ODBCResultSet
   Dim IsConnected As Integer
   Dim sValue As String
   Dim typ As String
   Dim ausdruck As String
   Dim feld() As String
   Dim counter As Integer
   
   counter = 0
   typ = "D0084"
   ausdruck = "SELECT * FROM Gerät WHERE GeräteTyp = '"& typ & "'"
   
           IsConnected = Con.ConnectTo("RekDB2")
   Set Qry.Connection = Con
       
   Qry.SQL = ausdruck
       
   Set Res.Query = Qry
           Res.Execute
       
   IsConnected = Res.FirstRow
   
   Do While IsConnected = True
      Redim Preserve feld(counter) As String

                  feld(counter) = Res.GetValue("SNr")
         
           
      IsConnected = Res.NextRow
 
      counter = counter+1
      
   Loop
        ' # ... die ODBC-DB schließen...
   IsConnected = Res.Close( DB_CLOSE )
        ' # ... die ODBC-Verbindung schließen.
   IsConnected = Con.Disconnect
End Sub

MisterDa

Titel: Re:ODBC Problem
Beitrag von: ata am 04.04.03 - 13:26:47
... die werte hast du ja nun in deinem Array "Feld"

Jetzt muß dieses Array einem Feld in deinem Dokument zugewiesen werden. Du hast den Code im Initialze eines Feldes. Hier ist der Code nicht optimal, nimm den Code ins PostOpen, da ist der Code besser positioniert. Im Initialze dieses Feldes wird niemand nach dem Code suchen - und das macht für späteree Entwickler die Suche schwerer und unübersichtlicher...

... ich nenne das Feld zur Aufnahme der Liste mal "ListODBC"
... der Code ist im Postopen plaziert...

Dim ws As New NotesUIWorkspace
Dim docThis As NotesDocument

' # hier der Code, den du schon hast

Set docThis = Source.Document
' # die Zuweisung der Liste
docThis.ListODBC = feld

Call Source.refresh


... deine Auswahlliste bezieht die Werte nun per Formel. Als Formel gibst du den Namen des Listenfeldes ein, also ...

ListODBC

... ein hinweis sei noch erlaubt, Listenfelder haben eine Begrenzung in der Datenmenge...

ata


Titel: Re:ODBC Problem
Beitrag von: MisterDa am 04.04.03 - 14:23:47
Danke!

ich hab jetzt noch ein Problem..er zeigt mir die Werte in der Dialogliste und im ListODBC-Feld nacheinander mit Komma an (nr1, nr2, nr3, ...) ..ich hätte sie aber gerne wie in ner normalen Dialogliste untereinander einzeln anwählbar...geht das?


die max Size beträgt diese ominösen 64k oder?

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 04.04.03 - 14:31:28
... ich denke in diesem Fall 32KByte

... daß du die Werte mit Kommas angezeigt bekommst, hängt mit dem Listenfeld - ich hatte es ListODBC genannt - zusammen. Du mußt diesem Feld die Eigenschaft geben Mehrfachwerte zulassen und im dritten Register werte trennen bei "Neue Zeile" , Werte anzeigen "mit neuer Zeile" administrieren, dann müßten die Kommas weg sein...

... da fällt mir noch was ein, in deinen werten sollten auf keinen Fall Kommas oder Semikolons sein, das kann Notes bei Auswahlfeldern ins Schleudern bringen...

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 04.04.03 - 14:37:11
Juhu, es klappt endlich..

Danke ata
Titel: Re:ODBC Problem
Beitrag von: ata am 04.04.03 - 15:19:24
... gratuliere, dein erster Import per ODBC mit Script...
... gar nicht so wild, oder...

ata  ;)
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 07.04.03 - 07:59:01
Danke.  ;D

Jetz ist mir aber aufgefallen, dass ich den Code doch erst im Entering
des Feldes ausführen kann, weil ich vorher in einerm anderen Feld erst was auswählen muss und nach dieser Auswahl, richtet sich das Auswahlkriterium "typ" im Code...

kann es sein, dass 'Set docThis = Source.Document' nur im Postopen funktioniert?

MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 07.04.03 - 08:05:22
... ja, in der Art dort schon, denn im Postopen kommt das Object "Source" über das Event als NotesUIDocument...

... wenn du es im Entering benötigst, dann mußt du im Entering das Source deklarieren und initialisieren...

... doch Vorsicht, du mußt das bestehende Source ersetzen durch "uidoc" - denn "Source" ist dort als Vraiable bereits belegt...

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument

Set uidoc = ws.CurrentDocument

... einfügen, und alle Variablen (bis auf die im Heder der Funktion) umbenennen (Find & Replace)...

ata
Titel: Re:ODBC Problem
Beitrag von: MisterDa am 07.04.03 - 08:39:04

danke. jetzt kappts so wies soll :)

(musste allerdings noch ein NotesDocument einfügen und uidoc dem doc zuweisen, damit er die Zuweisung "doc.ListODBC=feld" annimmt...)


MisterDa
Titel: Re:ODBC Problem
Beitrag von: ata am 07.04.03 - 08:50:43
... ich hab mir den Code nicht mehr angeschaut, aber wie du es erwähnst, fällt es mir wieder ein, es war über Source initialisiert...

... auf jeden Fall funktioniert es jetzt - freut mich  ;D

ata