Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADS Create Table per SQL (https://www.delphipraxis.net/73214-ads-create-table-per-sql.html)

gmc616 13. Jul 2006 18:14

Datenbank: ADS_Local • Version: 7 • Zugriff über: ADS

ADS Create Table per SQL
 
Hallo DPler,

Wie schafft man es, dass man mit den ADS-Komponeten eine Table mittles SQL anlegen kann?
SQL-Code:
CREATE TABLE test (id integer);
Wenn ich versuche diesen befehle mit TAdsQuery.ExecSql auszuführen bekomme ich immer
Code:
Error 6420: The 'discovery' process for the Advantage Database Server failed. Unable to connect to the Advantage Database Server. axServerConnect
obwohl die vorherige Abfrage TAdsConnection.IsConnected TRUE ergeben hat. :wall:
Auch SELECT's auf andere Tabellen klappen prima. Nur das Anlegen nicht.

Ziel Sache ist, dass mein Programm per SQL aus einem File (z.B. update.sql) Tabellen erstellen oder modifieren können soll.

Weiß irgendwer Rat?

Grüße
gmc

seifman 13. Jul 2006 19:18

Re: ADS Create Table per SQL
 
Hi.


Kannst Du mal nen bissl mehr dazu posten? (Quelltext)

mfg seifman

RWarnecke 13. Jul 2006 21:09

Re: ADS Create Table per SQL
 
Hallo Probiere doch mal folgenden Befehl :
SQL-Code:
CREATE TABLE datenbankname.test (id integer);

et2004 14. Jul 2006 07:12

Re: ADS Create Table per SQL
 
Die Fehlermeldung hatte ich auch schon mal. Das Problem lag beim Aufbau der Verbindung zur Datenbank. Bei der ADS gibt es mehrere Möglichkeiten diese Verbindung aufzubauen:

- über einen richtigen ADS-Server
- mit ALS quasi ein lokaler "Server"
- AIS (habe ich noch nie benutzt)

Nehmen wir mal den lokalen "Server". Bei der Komponente TAdsConnection die Eigenschaft AdsServerTypes auf stADS_LOCAL setzen, den Alias zur Datenbank eitragen und die Eigenschaft IsConnected auf true setzen.

Danach bei TAdsQuery die Eigenschaft Databasename = Name der TAdsConnection (siehe Oben) und dann sollte es klappen.

joachimd 14. Jul 2006 08:22

Re: ADS Create Table per SQL
 
Zitat:

Zitat von gmc616
Code:
Error 6420: The 'discovery' process for the Advantage Database Server failed. Unable to connect to the Advantage Database Server. axServerConnect

Der Fehler kann beim Local Server nicht kommen. Ich vermute, Du hast die Query nicht an deine AdsConnection gebunden:
Delphi-Quellcode:
AdsQuery1.DatabaseName:=Adsconnection1.Name;
Übrigens: ich hatte schon mehrfach den Fehler bei Programmstart gesehen, wenn die AdsTable/AdsQuery Komponenten im Mainform liegen, die AdsConnection aber im Datenmodul. Immer war eine falsche Erstellungsreihenfolge schuld (immer erst das Datenmodul erzeugen!).

gmc616 18. Jul 2006 11:06

Re: ADS Create Table per SQL
 
[OT] So, wieder mal Zeit sich den Delphi-Problemen zu widmen[/OT]

Hmm ... :gruebel:, der Tipp von RWarnecke macht leider kein Unterschied.

Aber die Änderung nach Joachim's Tipp
Delphi-Quellcode:
QueryRef.DatabaseName:=ConnRef.Name;
hat eine andere Fehlermeldung gebracht.
Code:
The DatabaseName property has not been assigned a value.
Wie kann das denn sein? :?
Vorher hatte ich
Delphi-Quellcode:
QueryRef.DatabaseName:='ConnRef';
was in meinen anderen Programmen in der Art eigentlich funktionierte.

Um zu zeigen wo rum es eigendlich geht, hier mal der Code:
Delphi-Quellcode:
ConnRef := TAdsConnection.Create(nil);
try
  ConnRef.ConnectPath := 'D:\Data\';
  ConnRef.AdsServerTypes := [stADS_LOCAL];
  ConnRef.Connect;
  if ConnRef.IsConnected then
  begin
    QueryRef := TAdsQuery.Create(nil);
    // QueryRef.DatabaseName := 'ConnRef';
    QueryRef.DatabaseName := ConnRef.Name;
    QueryRef.SourceTableType := ttAdsCDX; // Muss CDX sein!
    QueryRef.AdsTableOptions.AdsCharType := OEM; // Muss OEM sein!

    QueryRef.SQL.Text := 'CREATE TABLE test (id integer);';
    try
      QueryRef.ExecSQL;
    except on E: EADSDatabaseError do
      ShowMessage (e.Message);
    end;

    QueryRef.close;
    QueryRef.Free;
  end;
finally
  ConnRef.Free;
end;
Mit der Reihenfolge der Erstellungen sollte es somit keine Probleme geben.
Meine AdsKomponenten liegen nicht auf einer Form, denn in meiner Unit gibt es keine Form. :mrgreen:

Irgendwo habe ich einen Denkfehler, ich weiß aber nicht wo. :roteyes:
Oder ich seh den Wald von lauter Bäumen nicht!? :shock:

Grüße
gmc

Union 18. Jul 2006 11:30

Re: ADS Create Table per SQL
 
Wenn Du das machst...
Delphi-Quellcode:
QueryRef.DatabaseName := ConnRef.Name;
... musst Du vorher auch dies tun
Delphi-Quellcode:
ConnRef.Name := 'ConnRef';

gmc616 18. Jul 2006 11:48

Re: ADS Create Table per SQL
 
Also doch der Wald! :wall: :pale:

Danke, das war es!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz