AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Paradox to Firebird

Ein Thema von f4k3 · begonnen am 19. Nov 2008 · letzter Beitrag vom 21. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#1

Paradox to Firebird

  Alt 19. Nov 2008, 10:35
Datenbank: Firebird • Version: 2.1.1 • Zugriff über: DBExpress
Moin Moin liebe DPler

ich hab n problem ... Ich schreib grad n App das mir meine Paradox-tabelle in eine Firebird-tabelle konvertieren soll ... und konvertieren ist hier nicht wirklich wörtlich gemeint

Ich möchte nämlich von Datensatz zu Datensatz gehen ... den aus der Paradox in die Firebird-tabelle reinschreiben ... also ich synchronisiere ... triffts glaub ich besser ...

leider funktionierts nicht ... ich hab folgende komponenten:

für BDE = 1x TTable, 1x JvDatasource
für Firebird = 1x TSimpleDataset, 1x JvDatasource, 1x TSQLConnection, 1x TSQLQuery

jetzt werded ihr sagen ... in TSimpleDataset ist doch bereits eine connection enthalten ... stimmt ... aber die kann ich für die TSQLQuery nicht verwenden ... weil die Connection mir nicht angeboten wird ... wenn ichs manuell eingeb kommt ne Fehlermeldung; Aber dürfte erstmal kein problem sein ... Die TQuery ist mit der Datasource verbunden die auf die SimpleDataset Comp. zeigt ...

nun wenn ich auf den button klick ... soll folgendes passieren ...

Delphi-Quellcode:
with sqFirebird.SQL do
      begin
        Clear;

        Nummer := tblBDE.FieldByName('Nummer').AsString;
        Oberbegriff := tblBDE.FieldByName('Oberbegriff').AsString;

        Add('INSERT INTO ' + cbFirebirdTable.Text + '(NUMMER, OBERBEGRIFF) VALUES (' + Nummer + ',' + Oberbegriff + ')');
      end;

      sqFirebird.Active := True;
      sqFirebird.ExecSQL();
      sqFirebird.Refresh;
      sqFirebird.Active := False;
      
      tblBDE.Next;
klappt jedoch nicht weil folgende Meldung kommt ...

Code:
Im Projekt Firebird_Convert.exe ist eine Exception der Klasse TDBXError mit der Meldung 'Token unknown - line 1, colum 1 Artikel' aufgetreten
also ich kapier scho dass es was mit den Variablen zu tun hat ... aber warum?!

....

ich habe testhalber mal die Query zur Entwurfszeit eingestellt ... mit den werten

INSERT INTO ARTIKEL (NUMMER, OBERBEGRIFF) VALUES ('1234', 'Test') Da kam zwar ne Debuggermeldung ... dass der Cursor nicht mehr zurückkommt ... aber nach einem Refresh ... war der Datensatz eingefügt ...

kann mir jemand helfen?!

Danke ...

Euer f4k3
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Paradox to Firebird

  Alt 19. Nov 2008, 10:39
Ich gehe mal davon aus, dass "Oberbegriff" in der Datenbank als String gespeichert wird. Dann musst Du es in ' einfassen:
Add('INSERT INTO ' + cbFirebirdTable.Text + '(NUMMER, OBERBEGRIFF) VALUES (' + Nummer + ',''' + Oberbegriff + ''')'); Oder lieber gleich Parameter verwenden.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Paradox to Firebird

  Alt 19. Nov 2008, 10:44
Oberbegriff und Nummer sind Strings ... weil Artikelnummern ja auch Buchstaben enthalten können ...

Danke ... ich werds gleich mal ausprobieren.
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Paradox to Firebird

  Alt 19. Nov 2008, 10:49
Wenn "Nummer" auch ein String ist, natürlich das auch in ' einfassen.
Ich habe mir angewöhnt, alphanumerische Schlüsselfelder als "Code" zu bezeichnung und nur numerische Felder als "Nummer" zu bezeichnen. So kann man gleich am Namen erkennen womit man es zu tun hat.

Wobei ich nochmal anregen möchte, wirklich Parameter zu verwenden. Das wird auch die Ausführgeschwindigkeit Deiner Routine spürbar verbessern.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Paradox to Firebird

  Alt 19. Nov 2008, 10:56
Zitat von Nersgatt:
Wenn "Nummer" auch ein String ist, natürlich das auch in ' einfassen.
Ich habe mir angewöhnt, alphanumerische Schlüsselfelder als "Code" zu bezeichnung und nur numerische Felder als "Nummer" zu bezeichnen. So kann man gleich am Namen erkennen womit man es zu tun hat.

Wobei ich nochmal anregen möchte, wirklich Parameter zu verwenden. Das wird auch die Ausführgeschwindigkeit Deiner Routine spürbar verbessern.

Gruß,
Jens
Okay soweit hatts schonmal geklappt ... SQL-Befehl sieht nun folgendermaßen aus ...

Add('INSERT INTO ' + cbFirebirdTable.Text + '(NUMMER, OBERBEGRIFF) VALUES('''+Nummer+ ''','''+Oberbegriff+''')');

nun hab ich ein Problem ...

Code:
Im Projekt Firebird_Convert.exe ist eine Exception der Klasse EDatabaseError mit der Meldung 'sqFirebird: Cursor nicht aus Abfrage zurückgekehrt' aufgetreten ...
kann mir mal jemand sagen was des überhaupt heißen soll?! ... und warum dieser fehler bei jeder Abfrage auftritt?!

Zu den Parametern ... hab mich noch nicht damit beschäftigt ... aber werds mir auf jeden fall mal ankucken ...

Du hast dich ja gerade freiwillig dazu bereit erklärt Hilfestellung zu leisten

Vielen Dank euer F4k3
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Paradox to Firebird

  Alt 19. Nov 2008, 11:05
Delphi-Quellcode:
    sqFirebird.Active := True;
      sqFirebird.ExecSQL();
      sqFirebird.Refresh;
      sqFirebird.Active := False;
Das kannst Du eindampfen zu
      sqFirebird.ExecSQL(); Damit sollte das Problem mit dem Cursor auch behoben sein. Ich habe es jetzt nicht ausprobiert, denke aber, dass im Moment Deine Abfrage sogar 3x ausgeführt wird.
(1. Active := True 2. ExcecSQL 3. Refresh)
Wenn Du sowieso keine Rückgabewerte erwartest, reicht das ExcecSQL aus.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Paradox to Firebird

  Alt 19. Nov 2008, 11:13
Zitat von Nersgatt:
Delphi-Quellcode:
    sqFirebird.Active := True;
      sqFirebird.ExecSQL();
      sqFirebird.Refresh;
      sqFirebird.Active := False;
Das kannst Du eindampfen zu
      sqFirebird.ExecSQL(); Damit sollte das Problem mit dem Cursor auch behoben sein. Ich habe es jetzt nicht ausprobiert, denke aber, dass im Moment Deine Abfrage sogar 3x ausgeführt wird.
(1. Active := True 2. ExcecSQL 3. Refresh)
Wenn Du sowieso keine Rückgabewerte erwartest, reicht das ExcecSQL aus.

Gruß,
Jens
Merci ... läuft grad durch ... etz muss ich nur ne halbe stunde warten bis das dingens durchgelaufen is
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Paradox to Firebird

  Alt 19. Nov 2008, 11:16
Zitat von f4k3:
Merci ... läuft grad durch ... etz muss ich nur ne halbe stunde warten bis das dingens durchgelaufen is
Ein Grund mehr, sich mit Parametern zu beschäftigen. Dann müsstest Du nur 10 Minuten warten

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#9

Re: Paradox to Firebird

  Alt 19. Nov 2008, 11:28
Zitat von Nersgatt:
Zitat von f4k3:
Merci ... läuft grad durch ... etz muss ich nur ne halbe stunde warten bis das dingens durchgelaufen is
Ein Grund mehr, sich mit Parametern zu beschäftigen. Dann müsstest Du nur 10 Minuten warten

Gruß,
Jens
mhm ... ich versteh aber des prinzip noch net ganz ... wie weiße ich einem parameter den wert der BDE-Tabelle zu?!
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

Re: Paradox to Firebird

  Alt 19. Nov 2008, 11:38
Das Prinzip ist, die eigentliche Query nur einmal zu erstellen (Firebird muss dann auch nur einmal den Querytext parsen und prüfen, ob die Syntax passt).
In Deiner Schleife füllst Du dann nur noch die Parameter.

Für Deinen Fall würde das ungefähr so aussehen (aus dem Kopf zusammen geschrieben, Teilweise Pseudo-Code):


Delphi-Quellcode:
sqFirebird.SQL.Clear;
sqFirebird.SQL.Add('INSERT INTO ' + cbFirebirdTable.Text + '(NUMMER, OBERBEGRIFF) VALUES (:Nummer, :Oberbegriff)');
sqFirebird.PrepareStatement; {Veranlasst Firebird, die Syntax zu prüfen und die Auflistung der Paramter wird erstellt}

FÜR ALLE DATENSÄTZE AUS DER QUELLTABELLE (Schleife)

  {Werte in die Parameter schreiben}
  sqFirebird.ParamByName('NUMMER').AsString := tblBDE.FieldByName('Nummer').AsString;
  sqFirebird.ParamByName('Oberbegriff').AsString := tblBDE.FieldByName('Oberbegriff').AsString;
  sqFirebird.Prepared := True;
  sqFirebird.ExcecSQL(); {und abfeuern}

NÄCHSTER DATENSATZ
So ungefähr.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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