SQL Statement ausführen scheitert

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

SQL Statement ausführen scheitert

Beitrag von Magic »

Hi,

ich möchte aus einen Programm heraus, in dem ich normalerweise nativ auf die ADS zugreife, ein SQL Statement (select) ausführen.
Daran scheitere ich.
Ist mal jem. so nett und gibt mir mal einen Hinweis was ich da machen soll?
Wenn ich aus dem Programm auf den SQL Server will, dann habe ich dafür extra eine DacSession Verbindung auf:

Code: Alles auswählen

   dbesetdefault( "ODBCDBE" )

   cConnect := "DBE=ODBCDBE"
   cConnect += ";DRIVER=SQL Server"
   cConnect += ";SERVER=" + gcServer
   cConnect += ";UID=" + gcUser
   cConnect += ";PWD=" + gcPasswort
   cConnect += ";DATABASE=" + gcDatenbank

   SET NULLVALUE OFF

   MEMVAR->goSQLSession := DacSession():new( cConnect )
und führe dann die sql Abfragen so aus:

Code: Alles auswählen

      cSql := " Select … "
      use ( cSql ) new alias "SQL_ABFRAGE" via "ODBCDBE"
Wie mache ich das nur, wenn ich auf die ADS via sql will?
Gruß,
Magic
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQL Statement ausführen scheitert

Beitrag von georg »

Hallo, Magic -


DRIVER={SQL Server}

muss m.W. in geschweiften Klammern stehen, und der Name des Treibers muss EXAKT dem Namen entsprechen, wie er in der Datenverwaltung auftaucht.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: SQL Statement ausführen scheitert

Beitrag von Magic »

Hi,

der Code im ersten Post funktioniert - für den Zugriff auf einen SQL (Microsoft SQL) Server - problemlos.
Das nutze ich bereits seit Jahren.

Mir ist jetzt nur nicht klar, wie ich eine "Select ..." Anweisung auf eine Tabelle auf dem ADS ausführen soll.
Muss ich dazu noch ein separates DacSession Objekt aufbauen?
Ich vermute dass das der Schlüssel zum Erfolg ist,
denn wenn ich es nicht mache bekommen ich den Fehler:
Database Engine und aktive Session sind nicht kompatibel
Das Standard Session Objekt für die ADS lautet bei mir:

Code: Alles auswählen

define ppADS_CONNECTION "DBE=ADSDBE;SERVER=//XYZ"
...
MEMVAR->poAdsSession := DacSession():New( ppADS_CONNECTION )
Irgendwie stehe ich gerade auf dem Schlauch ...
Gruß,
Magic
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQL Statement ausführen scheitert

Beitrag von georg »

Hallo, Magic -


Du brauchst einen ODBC-Treiber für ADS, den Du unter DRIVER= einträgst. Danach sollte alles funktionieren.

Zumindest wenn Du - so wie ich Dich verstanden habe - mittels ODBCDBE auf ADS zugreifen willst.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: SQL Statement ausführen scheitert

Beitrag von Magic »

georg hat geschrieben: Zumindest wenn Du - so wie ich Dich verstanden habe - mittels ODBCDBE auf ADS zugreifen willst.
Das war so meine Idee.
Ich muss in einer Tabelle mit ca. 150.000 Datensätzen und 80 Feldern, einen Wert in drei Spalten suchen.
Die betroffenen Spalten sind in keinem Index, einen neuen Index dafür erstellen lohnt nicht, da ich diesen zu selten brauche.

Alternativ könnte ich natürlich mit Filter arbeiten, dass mache ich aber äußerst ungern.

Eine andere Idee als die mit dem SQL Statement habe ich nicht, dafür muss ich wohl über ODBCDBE gehen.
Bin allerdings auch für andere Ideen offen.
Gruß,
Magic
Antworten