Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabellenspalten von FreeTables in DataDictionary kopieren (https://www.delphipraxis.net/155230-tabellenspalten-von-freetables-datadictionary-kopieren.html)

Ascuriah 14. Okt 2010 08:41

Datenbank: Advantage Database Server • Version: 9.0 • Zugriff über: Advantage Data Architect 9.0

Tabellenspalten von FreeTables in DataDictionary kopieren
 
Moin Moin DP´ler

Bin noch ein ziemlicher Anfänger in Delphi in Kombination mit der ADS Datenbank, da ich in der Suche nix passendes gefunden habe schildere ich mein Problem mal:
Wir haben in der Arbeit sämtliche Datensätze in ADS Freetables (Durch den import durch Paradox damals anscheinend nicht anders möglich, ka).
Nun sollen aus den hunderten von FreeTables gewisse Spalten in eine Tabelle in einem neuen Data Dictionary eingefügt werden.

1. Frage: Ist es überhaupt möglich Tabellenspalten und dehren Inhalte, von Freetabels in eine Tabelle in einem DD zu kopieren?
2. Wenn JA, was mach ich hier in der SQL Syntax falsch:
Code:
//FREETABLES -> ADD
INSERT INTO "C:\ADS\OLAP Dictionary\OLAP_DICTIONARY.ADD".TEST_OLAP (TEST_Key)            //Gibt das Ziel ADD, sowie die Tabelle und die ZielSpalte an.

SELECT KBU_KEY FROM "C:\ag32ads\AFLDaten\K1\M13\01.01.2007-31.12.2007".AGF_KBU;          //Gibt die QuellSpalte KBU_Key der QuellTabelle AGF_KBU an
Also von einem Dictionary in ein anderes klappts, das hab ich getestet.
Vielleicht kann mir ja jemand weiter helfen wie man das lösen kann, vielleicht klappts ja auch anders oder statt reinem SQL über Delphi-Code oder eine andere SQL Anweisung bin für alles offen, hauptsache ich bekomm die Spalten in mein Dictionary^^.
mfg

AScu

joachimd 14. Okt 2010 10:45

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
ich würde die freien Tabellen in ein Unterverzeichnis legen, das macht die Syntax einfacher. Wenn Du dann mit dem Dictionary verbunden bist, reicht folgendes:
Code:
insert into mynewtable(field1,field2,field3) select field1,field2,field3 from [.\subfolder\myoldtable]
PS: Fehlercodes und -meldungen wären interessant genug, um diese mit-zu-posten;)

Ascuriah 14. Okt 2010 10:57

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Die Freien Tabellen liegen ja in dem Unterverzeichnis 01.01.2007-31.12.2007 wenn du das damit meinst.

Die Fehlermeldung die ich bei meiner Syntax bekommen lautet:

poQuery: Error 7200: AQE Error: State = HY000; NativeError = 5174; [iAnywhere Solutions][Advantage SQL][ASA] Error 5174: Advantage failed to open the specified link. C:\ag32ads\AFLDaten\K1\M13\01.01.2007-
31.12.2007: Error 7013: Advantage server file access error. Table name: AGF_KBU

joachimd 14. Okt 2010 11:02

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Zitat:

Zitat von Ascuriah (Beitrag 1055714)
poQuery: Error 7200: AQE Error: State = HY000; NativeError = 5174; [iAnywhere Solutions][Advantage SQL][ASA] Error 5174: Advantage failed to open the specified link. C:\ag32ads\AFLDaten\K1\M13\01.01.2007-
31.12.2007: Error 7013: Advantage server file access error. Table name: AGF_KBU

Berechtigungsprobleme: 7013 in der Hilfe-Datei

Ascuriah 14. Okt 2010 11:46

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Jo das habe ich auch rausgefunden, aber ich besitze sämtliche Rechte und wenn ich die selbe Anweisung nicht von Freetables sondern von einem DD ausführe funktioniert es:

Code:
//ADD -> ADD FUNKTIONIERT:
INSERT INTO "C:\ADS\OLAP Dictionary\OLAP_DICTIONARY.ADD".TEST_ARTIKEL (TEST_Key)
SELECT ArtikelNr FROM "C:\ADS\FIRMA Datenbank\FIRMA_DB.ADD".ARTIKEL
(Die Berechtigungen sind bei dieser Abfrage genau die selben)

Ascuriah 14. Okt 2010 12:07

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Alles klar die Eckigen klammern warens!! Endlich hab ichs vielen vielen dank das rettet den tag;)

mfg

Ascu

ps: ich werde sie empfehlen^^

joachimd 14. Okt 2010 12:43

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Zitat:

Zitat von Ascuriah (Beitrag 1055742)
ps: ich werde sie empfehlen^^

Danke. aber in den Newsgroups und foren sind wir eigentlich alle per Du;)
Übrigens gibt es ab Montag eine Europa-Tour mit dem ADS ADS TecDays. Da kann man eine Menge lernen - ebenso wie in meinem Buch:D

DeddyH 14. Okt 2010 13:33

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Zitat:

Zitat von joachimd (Beitrag 1055751)
Übrigens gibt es ab Montag eine Europa-Tour mit dem ADS ADS TecDays. Da kann man eine Menge lernen - ebenso wie in meinem Buch:D

[OT] Diese Werbung wurde Ihnen präsentiert von Delphi-PRAXiS - eine Perle der Natur :lol: [/OT]

Ascuriah 15. Okt 2010 11:46

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Tach Zusammen

Da ich noch eine weitere Frage zu selbigem Thema habe, dachte ich mir das hier zu posten statt einen neuen Thread zu öffnen.

Oben genannte und gelöste Problematik möchte ich nun in einem kleinen Delphi Programm lösen. Man klickt auf einen Button und die Datensätze sollen aus der alten Freetable in das Dictionary kopiert werden und über ein DBGrid dann angezeigt werden.

Hier der Code des ButtonClick Events:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
    QuellConnection.ConnectPath := 'C:\ADS\OLAP Dictionary\OLAP_DICTIONARY.ADD';
    sInsert := 'insert into test_olap (test_key)'+
    'select kbu_key from [C:\ag32ads\AFLDaten\K1\M13\01.01.2007-31.12.2007\agf_kbu]';
    AdsQuery1.SQL.Add(sInsert);
    AdsQuery1.ExecSQL;
    AdsQuery1.Active := true;

end;
die Fehlermeldung lautet:

nur hab ich die exec funktion doch eingebaut, aseh wohl den wald vor lauter bäumen schon wieder nicht.
mfg

DeddyH 15. Okt 2010 11:51

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Und wenn Du die letzte Zeile einmal weglässt? Es macht ja keinen Sinn, ein INSERT-Query nach Ausführung auf aktiv zu setzen.

Ascuriah 15. Okt 2010 12:34

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Ja sehr geil hat mal wieder funktioniert!;)

danke danke

Ascuriah 19. Okt 2010 09:04

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Moin Liebe Delphi Gemeinde

Bei meinem vorher ja schon genannten Projekt möchte ich nun den Quellpfad der Daten über eine selectdirectory() prozedur lösen.
Hier mein Code:

Delphi-Quellcode:
procedure TForm1.BtnQuellPfadClick(Sender: TObject);              //Auswahl des Quell-Verzeichniss
begin
    SelectDirectory('Quellordner auswählen','C:\ag32ads\',QuellPfad);
    Edit1.Text := QuellPfad;
    //str := QuellPfad;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    AdsQuery1.SQL.Clear;
    sInsert := ' insert into test_olap (test_key) select ' +
    ' kbu_key from [ ' + Edit1.Text + ' \agf_kbu] ';
    AdsQuery1.SQL.Add(sInsert);
    AdsQuery1.ExecSQL;
end;
(alle Variablen sind ordnungsgemäß deklariert, sieht man hier nur ned^^)

wenn ich den Pfad fest in das Select Statement einbau funktionierts, wenn ich ihm aber nur den Pfad in einem String übergebe den er oben ausgewählt hat rödelt er recht lang (15-20sec) und man meint es klappt und dann kommt folgender Fehler:

Wäre super wenn mir jemand seine Idee mitteilen könnte

Bummi 19. Okt 2010 10:51

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
nimm mal das erste Leetrzeichen raus bei:

' \agf_kbu] '

Ascuriah 19. Okt 2010 14:04

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Das hat geklappt, vielen vielen Dank;)

Ascuriah 20. Okt 2010 10:28

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Hey ho

Ich habe in meiner QuellTabelle ein Feld "Buchubgsdatum" welches vom Typ Timestamp ist. Dieses Feld soll aber genauso in meine neue Tabelle eingefügt werden. Habe schon mit Variant, String, DateTime alles mögliche getestet, aber komme einfach ned auf den Grünenzweig. Hier der Code:

Delphi-Quellcode:
begin
     adsconnection1 := TAdsConnection.Create(nil);
     adsconnection1.AdsServerTypes := [stADS_REMOTE];
     adsconnection1.ConnectPath := 'C:\OLAP\OLAP_DICTIONARY\OLAP_DICTIONARY.ADD';
     adsconnection1.Username := 'Adssys';

     qryOlap := TAQuery.Create(nil);
     qryOlap.AdsConnection := adsconnection1;

     qryFibu := TAQuery.Create(nil);
     qryFibu.AdsConnection := Connection;
     qryFibu.SQL.Add('select * from [C:\ag32ads\AFLDaten\K1\M13\01.01.2007-31.12.2007\agf_kbu]');
     qryFibu.Open;
     qryFibu.First;
     while not qryFibu.Eof do
     begin
         buchungsdat_TS := qryFibu.FieldByName('KBU_BUCHUNGSDATUM').AsString;

         sInsert := 'insert into olap_fibu_daten (Buchungsdatum) values(' + buchungsdat_TS + ')';

         qryOlap.SQL.Clear;
         qryOlap.SQL.Add(sInsert);
         qryOlap.ExecSQL;

         qryFibu.Next;
     end;

     qryFibu.Close();
     FreeAndNil(qryFibu);

end;
Und Fehlermeldung erhalten ich folgende:
Code:
Erste Gelegenheit für Exception bei $754D9617. Exception-Klasse EADSDatabaseError mit Meldung 'Error 7200: AQE Error: State = 42000;  NativeError = 2116; [iAnywhere Solutions][Advantage SQL Engine]Malformed number: 01.01 -- Location of error in the SQL statement is: 175 There was a problem parsing the value list in the INSERT INTO statement.'. Prozess OlapUI.exe (4608)

DeddyH 20. Okt 2010 12:36

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Ich würde das Insert-Statement einmalig vor der Schleife setzen und vor allem Parameter verwenden. Und falls das Buchungsdatum kein alphanumerisches Feld sein sollte, kann man es doch gleich unbehandelt als Parameter weitergeben.

Ascuriah 20. Okt 2010 13:14

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Sry ich komm jetzt grad so garned drauf was du meinst. Parameter für die Pfade meinst du?

DeddyH 20. Okt 2010 13:48

AW: Tabellenspalten von FreeTables in DataDictionary kopieren
 
Delphi-Quellcode:
...
     qryFibu.Open;
     //SQL einmalig setzen
     qryOlap.SQL.Text := 'insert into olap_fibu_daten(Buchungsdatum) values(:buchdat)';
     while not qryFibu.Eof do
     begin
         //in der Schleife nur Parameter neu belegen
         qryOlap.ParamByName('buchdat').Value := qryFibu.FieldByName('KBU_BUCHUNGSDATUM').Value;      
         qryOlap.ExecSQL;

         qryFibu.Next;
     end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 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