ODBC Treiber

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: ODBC Treiber

Beitrag von flanelli »

Hallo Carlo
Es wäre sehr schön, wenn Du meine Ausführungen zu der Unsitte eines kostenpflichtigen
Bugfixupdates auch genau und sinnerfassend lesen würdest bevor Du Dich darüber dermaßen alterierst.
ramses hat geschrieben: Du sprichts von einem Fehler den eine Komponente von anno domini 2006 heute 14 Jahre später macht.
NEIN, davon habe ich definitiv nicht gesprochen sondern vielmehr ganz klar und deutlich das,
von manchen Unternehmen recht ausgiebig strapazierte Verpacken von Bugfixes in kostenpflichtige
Updates angesprochen. Nicht mehr und nicht weniger.
Zum damaligen Zeitpunkt war die 1.90.355 ganz klar zum massivst überwiegenden Teil nichts anderes als
ein solches Bugfixing und wer mit den Problemen, die durch diese, teils gravierenden Fehler
nicht zurande kam und kein Workaround finden konnte, der mußte dafür bezahlen.
Vor allem mußte auch jeder dafür bezahlen der zeitlich nur kurz davor das Produkt erworben hatte
und somit für ein Produkt bezahlt hat, dass vom Hersteller WISSENTLICH mit gravierenden Fehlern
verkauft wurde und der dann prompt für die ( allerdings auch nur teilweise ) Beseitigung der
Fehler dem Kunden dies nicht kostenfrei zur Verfügung stellt sondern in ein kostenpflichtige
Update verpackt. Das ist nicht in Ordnung und da gibt es keine ernstzunehmenden Argumente die
eine solche Vorgehensweise auch nur im geringsten rechtfertigen.
ramses hat geschrieben: Der Kunde bezahlt damit solche Fehler behoben werden und die Programme auf dem aktuellen Stand und vorallem auch kompatibel zu den verwendeten Komponenten gehalten werden .......
NEIN, der Kunde bezahlt NICHT dafür, dass ein Hersteller Fehler behebt sondern er bezahlt
für ein funktionierendes Produkt und er bezahlt für die Weiterentwicklungen eines Produktes.
So sollte es sein und so ist es auch bei manchen Herstellern ( einerlei um welches Produkt es
sich dabei handeln sollte ) auch der Fall.
ramses hat geschrieben: Du gehst ja auch nicht "kostenlos" auf Fehlersuche in deinen 14 Jahre alten Programmen. Oder doch??
Ob Du es glaubst oder nicht, genau das machen wir und zwar in den Fällen, wo es Anwender gibt,
die mit der ursprünglich gekauften Version eines unserer Produkte rundum alles abdecken können
was sie brauchen und wollen und die auf Neuerungen und Erweiterungen einfach keinen Wert legen.
Dies sind zwar in der Relation zu allen Kunden nicht so viele an der Zahl ( ca. 2% )
aber es handelt sich dabei durchgehend um Kleinstunternehmen und diese haben bei uns denselben
Stellenwert wie ein Konzernkunde mit 1600 Arbeitsplätzen.
Wenn ein Problem in einer unserer Applikationen auftritt und dieses Problem mit hoher Wahrscheinlichkeit
bzw. eigentlich ganz klar als Fehler zu diagnostizieren ist, dann erhält bei uns jeder Kunde
der mit so einem Problem konfrontiert wird, ein entsprechendes KOSTENLOSES Fixing für SEINE Version.
Wie alt diese Version ist spielt dabei keine Rolle denn wir hatten auch schon mal ein paar Fälle
wo ein Problem erst dann für den Kunden relevant wurde, nachdem er ein Feature einsetzte, das er
bis zu diesem Zeitpunkt einfach nicht nutzte.
Sobald uns ein eindeutiger Fehler bekannt war, haben wir generell jeden unserer Kunden darüber
informiert und ihm selbstverständlich ein kostenloses Fixing zur Verfügung gestellt.
Das ist für uns eine Frage der ehrlichen und seriösen Unternehmenskultur und ein ganz klares
NEIN zur Philosophie des "leicht anders Verpacken" zu Ungunsten des Kunden.
Wir bieten jedem dieser Kunden natürlich die Möglichkeit eines Umstieges auf die aktuellste Version
aber wir zwingen niemanden ( und vor allem schon gar nicht die Kleinstunternehmer ) für unsere Fehler
und deren Beseitigung etwas bezahlen zu müssen.
JA, unser Aufwand dafür war zuweilen nicht gering und da wir auch weiterhin sicher nicht 100%tig
fehlerfrei erbeiten werden können, wird dies so beibehalten und das machen wir gerne im Sinne
unserer Kunden und auch im eigenen Interesse denn es gibt nichts seriös erfolgreicheres als summa summarum
zufriedene Kunden die eine faire Unternehmenspolitik zu schätzen wissen.
Es ist letztendlich ja auch nur eine Frage der Organisation und wie man eine Versionspflege handhabt.
Wir sind damit auch schon zu Zeiten eines Updatehandlings mittels Diskette ganz gut zurecht gekommen.
ramses hat geschrieben: Wenn dein Kunde wegen Umlagerungen der Kosten der verwendeten Tools zu etwas anderem umsteigt hast du entweder die falschen Kunden oder das falsche Programm / Argumente.
Abermals NEIN. Wir kennen und haben keine falschen Kunden und alle unsere Kunden verwenden auch
die richtigen unserer Produkte. Diese Überheblichkeit, die Du damit zum Ausdruck bringst und vor
allem ein fadenscheiniges Argumentieren zur Kaschierung eigener Fehler hat bei uns keinen Platz.
Wenn ein Kunde für die Reparatur eines eindeutig fehlerhaften Produktes bezahlen muss dann hat
er meines Erachtens völlig Recht, wenn er sich nach einem anderen Produkt umsieht.

Damit ist meinerseits alles zu diesem Thema gesagt und ich entschuldige mich nochmals
gegenüber alle Forenteilnehmern für das Abschweifen in diesem Thread.

PS.: Falls ein Admin der Meinung sein sollte, dass meine Ausführungen besser woanders stehen sollten dann bitte
ich höflichst um ein entsprechendes Verschieben meiner Beiträge bzw. auch jener die damit causal zusammenhängen.#
Danke :-)
Ahoile aus dem Süden
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
wie bereits gesagt, ich greife mit einem Codeschnipsel von Tobax drauf zu. Wenn ich das richtig sehe, so wir in der Registry geschaut welche ODBC Treiber zur Verfügung stehen und dann mit darauf zugegriffen.

Code: Alles auswählen

odbcda:=SQLConnection():GetDataSources()	// liest alle ODBC Datenquellen ein, es werden nur die 32 bit berücksichtigt
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


da SQLConnection() eine Klasse innerhalb von SQLExpress ist, gehe ich mal davon aus, dass Du dieses Produkt benutzt.

Dann schau Dir mal diesen Link an: http://xb2.net/sqlxpp/sqlxpp.htm#SQLConnection

Wenn Du die Methode :DriverConnect([nWindowHandle], [cConnectString], [nDriverCompletion], [lReadOnly] ) -> lSuccess verwendest, kannst Du mit einem Connection String anstelle einer DSN arbeiten.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: ODBC Treiber

Beitrag von flanelli »

saul hat geschrieben: Sa, 25. Jan 2020 7:30 Hallo,
ich habe eine Datenbank mit ca. 50000 Datensätze. Nun möchte ich alle die raussuchen, die in einem Feld den String "Reifen beinhalten. Da kann ich mit scope nichts begrenzen und die Suche dauert unsäglich lang. Mittels odbc Treiber sieht das anders aus. Falls ich das falsch sehe, bitte melden.
Wolfgang
Hallo Wolfgang,
wenn du auf diesem Feld einen aktiven Index laufen hast dann wäre eine Eingrenzung nach inhaltlichen Teilbegriffen in diesem
Feld mittels Ordwildseek() jedenfalls kein nennenswertes Zeitproblem.
Für die nachfolgende Darstellung z.b.: in der Browsertabelle mußt du halt als Quelle statt der DBF das Array nehmen.

siehe Hilfe
OrdWildSeek( <cSkeletonExpr> )
Damit kannst du auch kombinierte Suchmuster ganz einfach abarbeiten


wild_suche:="Reifen"
wild_arr:={}
wild_ok:=OrdWildSeek(wild_suche)
DO WHILE Found() // gegebenfalls weitere Bedingungen via .and.
if OrdWildSeek()
** auch hier gegebenfalls weitere Bedingungen via if
aadd(wild_Arr,... whatever )
endif
enddo
Ahoile aus dem Süden
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hi,
wenn ich jetzt "*reifen*" in Feld 1 und "*tire*" in feld 2 suche geht das nicht weil ich ja nur einen Index habe oder?

Wolfgang
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: ODBC Treiber

Beitrag von ramses »

Hallo Flanelli

du verstehst mich grundsätzlich vollkommen falsch.
Ich weiss nicht was für welche Progs du schreibst. Ist auch egal.
Als "falsche Kunden" meine ich solche die *immer* an allem rumnörgeln und Apps aus einem App-Store für 4$ sowieso immer viel besser sind ...... oder auch immer sofort das Argument kommt dann steige ich auf etwas anderes um. Im App-Store gibts für 4$ eine viel bessere APP .....
Kein Hersteller/Programmierer verkauft WISSENTLICH Produkte mit Fehlern oder gravierenden Fehlern, dies würde ja auch wie alle anderen Fehler durch die Gewährleistung und/oder anderes abgedeckt und wäre schlicht und einfach unseriös.
Alle die ich kenne versuchen Fehler die in einer bestimmten Frist auftauchen auch kostenlos bezw. zu Selbstkosten zu beseitigen..... aber alles hat (Zeitliche) Grenzen.
Aber besser wir lassen wir dieses Thema.
Valar Morghulis

Gruss Carlo
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: ODBC Treiber

Beitrag von flanelli »

saul hat geschrieben: Sa, 25. Jan 2020 16:32 Hi,
wenn ich jetzt "*reifen*" in Feld 1 und "*tire*" in feld 2 suche geht das nicht weil ich ja nur einen Index habe oder?

Wolfgang
Wie aus der Funktionsbeschreibung klar hervorgeht, bezieht sich das Suchmuster auf den aktiven Index der
aktuellen Workarea. Somit erfolgt die globale Eingrenzung mit OrdWildSeek natürlich nur auf diesen Indexausdruck
bezogen.

Wenn Du innerhalb der übereinstimmenden Datensätze noch eine weitere Eingrenzung nach anderen Kriterien
( z.B. Inhalte anderer Felder ) möchtest, dann machst Du das - wie schon dargestellt - ja innerhalb der Schleife.

Eine Eingrenzung nach "reifen" in Feld 1 UND "tire" in feld 2 ist somit natürlich machbar,
nicht jedoch eine solche nach "reifen" in Feld 1 ODER "tire" in feld 2.
Dazu müßtest Du eine zweite Schleife durchlaufen die dann auf einen aktiven Index auf das Feld 2 zugreift
und danach muss man eben beide Arrays auf Dublette ( z.B. der Satznummer oder dergleichen ) sozusagen bereinigen.
Der Zeitfaktor wird auch hier keine große Rolle spielen solange es bei 2 Schleifen bleibt, aber bei zu vielen Feldern
wird das irgendwann dann natürlich auch nicht mehr so flott gehen.
Ahoile aus dem Süden
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

da SQLConnection() eine Klasse innerhalb von SQLExpress ist, gehe ich mal davon aus, dass Du dieses Produkt benutzt.

Dann schau Dir mal diesen Link an: http://xb2.net/sqlxpp/sqlxpp.htm#SQLConnection

Wenn Du die Methode :DriverConnect([nWindowHandle], [cConnectString], [nDriverCompletion], [lReadOnly] ) -> lSuccess verwendest, kannst Du mit einem Connection String anstelle einer DSN arbeiten.
Habe ich versucht, aber mit mässigem Erfolg. Mit einem fertig eingerichtetem Treiber funktioniert es.

Code: Alles auswählen

   oConn := SQLConnection():new("Test")	// Test ist ein eingerichteter ODBC Treiber

   // now create a cursor to 'browse' the new table...
   oCursor := oConn:Cursor("SELECT * FROM Lager")

   oCursor:Execute()

   ? "Here's the contents of the new table...."
   for I = 1 to 5
	? oCursor:FieldGet("pn"), oCursor:FieldGet("Bezeich")

	oCursor:skip()
  next
Ersetze ich den Befehl

Code: Alles auswählen

  oConn := SQLConnection():new()
  oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQL ODBC}; DBQ=k:\lager\Lager.dbf") 
gibt es Fehlermeldungen. "Parameter hat falschen Typ". Der Hilfedatei von SQL Express habe ich auch keine Lösung entnehmen können.
Dateianhänge
Unbenannt.jpg
Unbenannt.jpg (68.05 KiB) 11142 mal betrachtet
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hi,

Code: Alles auswählen

oConn := SQLConnection():new()
oConn:DriverConnect( NIL , "Database=Clipper; Driver={Advantage StreamlineSQL ODBC} ; SERVER=(local) ; UID=Lager ;  DATABASE=K:\lager ; DefaultType=Clipper "  )
Jetzt gibt es zwar keine Fehlemeldung mehr sondern da geht ein ODBC Driver setup Fenster auf, ich weiß aber nicht warum.

Wenn ich nun keinen ODBC Treiber während der Ausführung des Programmes einrichten kann, gibt es eine Möglichkeit Daten in die Registry zu speichern? Dann könnte ich mir eventuell dort einen ODBC Treiber einrichten.

Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


nimm mal die Blanks nach den Semikolons aus dem Connection String raus.

Es geht definitiv mit dem Connection String, und ein Knackpunkt war immer die KORREKTE Schreibweise des ODBC-Treibers, aber es mag noch andere Stolpersteine geben. Und die Blanks sehen mir danach aus ...

Hier ein Beispiel aus einem meiner Programme:

Code: Alles auswählen

   cLine := "Driver={" + SQLUGetDriverName("EXCEL", oConX) + "};ReadOnly=0;MaxScanRows=0;FirstRowHasNames=1;FIL=excel 8.0;DBQ=" + cXFile + ";"
   IF !oConX:driverConnect(NIL, cLine)
      ConfirmBox(, "Could not connect to Excel subsystem (ODBC)", "Error", XBPMB_OK, XBPMB_INFORMATION)
      RETU(.F.)
   ENDIF
SQLUGetDriverName() ist eine Funktion, die ich mir geschrieben habe, um den korrekten Namen zu ermitteln. Aber dieser Code-Ausschnit funktioniert definitiv, also sollte es bei Dir auch gehen.

Augenscheinlicher Unterschied sind die Leerzeichen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Code: Alles auswählen

  oConn := SQLConnection():new()	
  oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQL ODBC} "  )
  // now create a cursor to 'browse' the new table...
   oConn := oConn:Cursor("SELECT * FROM Lager")

   oConn:Execute()

  ? "Here's the contents of the table...."
  for I = 1 to 5

    ? oConn:FieldGet("pn"), oConn:FieldGet("Bezeich")

    oConn:skip()
  next
	
Ich habe das ganze mal auf ein minimum reduziert. Dann geht beim Starten des Programms ein Fenster auf (ODBC1.jpg). Fülle ich dann die nötigen Felder aus (ODBC2.jpg), so funktioniert auch die Verbindung ODBC3.jpg.

Bei

Code: Alles auswählen

oConn:DriverConnect( NIL , "Driver={Driver do Microsoft dBase (*.dbf)} " )
erscheint auch das leere Driver Fenster (ODBC4.jpg).

Code: Alles auswählen

  oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQL ODBC} ; UID=Lager"  )

  oConn:DriverConnect( NIL , "Driver={Driver do Microsoft dBase (*.dbf)} ; UID=Lager " )
UID trägt bei bei Advantage das Wort Lager in das Feld UserName ein (ODBC5.jpg). Das war Zufall, dass ich das entdeckt habe. Bei Microsoft Treiber passiert nichts.

Daraus ergibt sich für mich:
Wie kann ich die Felder des OBDC Treibers eintragen? Das ist doch eine Sache von SQLExpress oder?
Wie mache ich es das das Eintragen im Hintergrund passiert?

Wolfgang
Dateianhänge
odbc1.jpg
odbc1.jpg (49.33 KiB) 11016 mal betrachtet
odbc2.jpg
odbc2.jpg (52.54 KiB) 11016 mal betrachtet
odbc3.jpg
odbc3.jpg (25.71 KiB) 11016 mal betrachtet
Zuletzt geändert von saul am Sa, 01. Feb 2020 13:55, insgesamt 3-mal geändert.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -


leider sehe ich keine Bilder?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
kann es sein, dass die Anzahl beschränkt ist?

Wolfgang
Dateianhänge
odbc4.jpg
odbc4.jpg (28.84 KiB) 11015 mal betrachtet
odbc5.jpg
odbc5.jpg (48.39 KiB) 11015 mal betrachtet
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Tja, ich habe zwar den Advantage Database Server auf meinem Rechner, nicht aber den ODBC-Treiber. Daher kann ich das nicht ausprobieren.

a) Du solltest mal auf die Blanks verzichten;
b) Du gibst eine UID an, kann die ohne Passwort zugreifen? Wenn nicht, musst Du auch ;Password=dasistabersehrgeheim angeben.

Fehlende, zwingend erforderliche Parameter führen dazu, dass der ODBC-Driver Setup angezeigt wird. Wenn Du also den Dialog siehst, fehlt noch etwas in Deinem Connection String.

Der Microsoft-Treiber greift auf die DBF-Datei zu, und dort gab es keine Benutzerverwaltung, daher ignoriert der Treiber Parameter, die er nicht braucht.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Wenn Du von Blanks sprichst meinst Du doch Leerstellen oder?

Code: Alles auswählen

	oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQLODBC} ; UID=Lager "  ) 
Lösche ich die Leerstelle vor ODBC gibt es eine Fehlermeldung. Ich glaube, dass das nicht mein Problem ist.
Was weiter komisch ist, dass sich die Felder beim Treiber unterscheiden. Wenn ich per Hand ein System DSN hinzufüge, so ergibt sich (ODBC1.jpg).

Code: Alles auswählen

	oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQLODBC} "  )
Über SQLExpress ergibt sich (ODBC2.jpg).
Fülle ich dann die Daten manuell aus (ODBC3.jpg) so funktioniert die Verbindung. Es scheint mir so als wenn die Beschreibung der Felder nicht von Interesse ist. Aber wie kann ich die Felder aus dem Programm heraus verändern?
Dateianhänge
odbc3.jpg
odbc3.jpg (44.03 KiB) 10995 mal betrachtet
odbc1.jpg
odbc1.jpg (51.8 KiB) 10995 mal betrachtet
odbc2.jpg
odbc2.jpg (50.67 KiB) 10995 mal betrachtet
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC Treiber

Beitrag von georg »

Hallo, Wolfgang -

Code: Alles auswählen

oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQL ODBC} ; UID=Lager "  )
vs.

Code: Alles auswählen

oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQLODBC};UID=Lager"  ) 
Mein Bauchgefühl sagt mir, dass die Leerzeichen IM Connection String, ZWISCHEN den Schlüsselwörtern, als Trennzeichen interpretiert werden.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Code: Alles auswählen

oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQLODBC};UID=Lager"  ) 
gibt eine Fehlermeldung weil die Schreibweise "Advantage StreamlineSQL ODBC" heißen muß. Die restlichen Leerspalten sind egal. Mit und ohne Leerspalten das gleiche Ergebniss.

Wolfgang
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Moin,
das ich mit UID etwas eintragen könnte ist reiner Zufall. Wenn ich mir das richtig überlege, so müsste es doch ein SQLExpress Problem sein. Wie weiß SQLExpress welche Daten es wo eintragen muss?
Oder gibt es für ODBC Eintragungen fest vorgegebene Werte?

Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von brandelh »

Hier ist ein Beispiel, dass ich vor vielen Jahren getestet habe:

oConn:driverConnect(nil, 'DRIVER=SQL Server;SERVER=(local);UID=;PWD=;DATABASE=FSA_UVCD')

Die Schreibweise von "SQL Server" muss nach meiner Erinnerung GENAU so aussehen wie der Name definiert wurde (Blanks, Groß-/Klein)

Die installierten Treiber mit Namen kann man abfragen:

Code: Alles auswählen

#include "sql.ch"
#include "sqlext.ch"
#define CRLF chr(13)+chr(10)

procedure main()
   local oConn, x:=0

   set alternate to ListDriver.txt
   set alternate on

   cls

   ? "Treiber:"
   ?
   oConn := SQLConnection():new()
   aeval(oConn:GetDrivers(),{|aDriver|qout(++x,aDriver)})

   wait

return
Gruß
Hubert
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Moin,
das würde ja bedeuten, dass wenn der ODBC Treiber mehr Infos benötigt, ich diese nicht mit einbinden kann. Ist das richtig?

Wolfgang
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ODBC Treiber

Beitrag von brandelh »

Man kann mit dem Tool eine ODBC Datenquelle definieren, die dann mit den Zugriffsinfos direkt angesprochen wird.
Der Vorteil ist, dass das Ziel auf jedem Rechner wo anders liegen kann, solange der Name gleich bleibt.

Über den Treiber zu gehen hat den Vorteil, dass man am Zielrechner nichts einstellen muss, Kennwort und UserID muss man dann eventuell mit übergeben (sonst kommt eine Abfrage wie oben)
Es ist ewig her, dass ich damit experimentiert habe, die Beispiele von SQLExpress haben bei mir aber gut funktioniert.
Gruß
Hubert
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Re: ODBC Treiber

Beitrag von saul »

Hallo,
habe eine Lösung gfunden

Code: Alles auswählen

	oConn:DriverConnect( NIL , "Driver={Advantage StreamlineSQL ODBC};UID=Lager;DataDirectory=K:\Lager;DefaultType=Clipper;Locking=File;ServerTypes=1"  )
https://stackoverflow.com/questions/335 ... -in-python habe ich durch Boris erfahren. Problem gelöst.
Danke allen für das neue Wissen welches ich nun habe.
Antworten