Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi insert into mit IBX und FB (https://www.delphipraxis.net/126405-insert-into-mit-ibx-und-fb.html)

karolus 23. Dez 2008 19:52

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBX Komponenten

insert into mit IBX und FB
 
Hallo DPler,

Ich will eine Paradox-Tabelle in eine FB-Tabelle einlesen. Beim Aufruf der eingefügten Routine erhalte ich den folgenden Fehler "Im Projekt BiblioDaten.exe ist eine Exception der Klasse EIBClientError mit der Meldung 'Feld "LfdNr" konnte nicht gefunden werden.' aufgetreten." Was mache ich falsch. Habe andere Routinen probiert, aber letztlich waren die Felder in der FB-Tabelle nicht vorhanden. Die Tabelle ist aber angelegt.
Jemand Hilfe für einen Neuling? Schon mal Danke vorab.

Gruß WE

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
     Form1.IBDataSet1.InsertSQL.Clear;
     Form1.IBDataSet1.InsertSQL.Add('Insert into RTitelAutor (LfdNr, TitelNr, UrheberNr) values (:LfdNr, :TitelNr, :UrheberNr)');
     Form1.IBDataSet1.Prepare;
     if Form1.IBDataSet1.Prepared then
          begin
               Form1.Table1.First;
               while not Form1.Table1.Eof do
               begin
                    Form1.IBDataSet1.ParamByName('LfdNr').AsInteger := Form1.Table1.FieldByName('LfdNr').AsInteger;
                    Form1.IBDataSet1.ParamByName('TitelNr').AsInteger := Form1.Table1.FieldByName('TitelNr').AsInteger;
                    Form1.IBDataSet1.ParamByName('UrheberNr').AsInteger := Form1.Table1.FieldByName('UrheberNr').AsInteger;
                    Form1.IBDataSet1.ExecSQL;
                    Form1.Table1.Next;
               end;
          end;
end;
[edit=MrSpock]Code-Tags eingefügt. Mfg, MrSpock[/edit]

mkinzler 23. Dez 2008 19:55

Re: insert into mit IBX und FB
 
In welcher Zeile tritt der Fehler auf? Alos entweder existiert das Feld in der Quell- oder der Zieltabelle nicht

DeddyH 23. Dez 2008 19:57

Re: insert into mit IBX und FB
 
Es sieht so aus, als ob in der Firebird-Tabelle das Feld "LfdNr" nicht vorhanden ist. Hast Du das beim Anlegen der Tabelle evtl. in Anführungszeichen geschrieben? Dann wäre es nämlich case-sensitiv.

karolus 23. Dez 2008 20:00

Re: insert into mit IBX und FB
 
Zitat:

Zitat von mkinzler
In welcher Zeile tritt der Fehler auf? Alos entweder existiert das Feld in der Quell- oder der Zieltabelle nicht

Der Fehler tritt in der ersten Zuweisungszeile im While-Block auf. Beide Tabellen sind definitiv vorhanden, die Paradox Tabelle mit Daten, die Firebird Tabelle leer.

DeddyH 23. Dez 2008 20:01

Re: insert into mit IBX und FB
 
Ja, aber ist das entsprechende Feld auch in beiden Tabellen vorhanden?

karolus 23. Dez 2008 20:03

Re: insert into mit IBX und FB
 
Zitat:

Zitat von DeddyH
Es sieht so aus, als ob in der Firebird-Tabelle das Feld "LfdNr" nicht vorhanden ist. Hast Du das beim Anlegen der Tabelle evtl. in Anführungszeichen geschrieben? Dann wäre es nämlich case-sensitiv.

Habe mir vorsichtshalber grad noch mal das Skript angesehen, nein, keine Anführungszeichen.

mkinzler 23. Dez 2008 20:04

Re: insert into mit IBX und FB
 
Die Frage ist nicht ob die Tabellen existieren, sondern ob ein Feld mit diesem namen existiert. FireBird ist anders als Paradox casesensitiv, wenn man das Feld Quotet. Im Insert ist es nicht gequotet. Falls es also wirklich LfdNr heisst, musst du es in der Abfrage in "" setzen (wie Detlef schon schrieb)

karolus 23. Dez 2008 20:06

Re: insert into mit IBX und FB
 
Zitat:

Zitat von DeddyH
Ja, aber ist das entsprechende Feld auch in beiden Tabellen vorhanden?

Ja, die Tabellen sind identisch aufgebaut.

DeddyH 23. Dez 2008 20:10

Re: insert into mit IBX und FB
 
Mir gehen im Moment die Ideen aus :gruebel:

mkinzler 23. Dez 2008 20:11

Re: insert into mit IBX und FB
 
Zeig mal die Tabellendeklaration

DeddyH 23. Dez 2008 20:13

Re: insert into mit IBX und FB
 
Zitat:

Zitat von mkinzler
Zeig mal die Tabellendeklaration

Beider Tabellen bitte.

karolus 23. Dez 2008 20:19

Re: insert into mit IBX und FB
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH
Zitat:

Zitat von mkinzler
Zeig mal die Tabellendeklaration

Beider Tabellen bitte.

Zitat:

Zitat von DeddyH
Zitat:

Zitat von mkinzler
Zeig mal die Tabellendeklaration

Beider Tabellen bitte.

Ausschnitt aus dem Skript
Create Table RTitelAutor
(
LfdNr Integer Not Null Primary Key,
TitelNr Integer Not Null,
UrheberNr Integer Not Null,
Foreign Key (TitelNr) References Titel(TitelNr),
Foreign Key (UrheberNr) References Urheber(UrheberNr)
);

Paradox Strukturinfo s. Anlage

DeddyH 23. Dez 2008 20:25

Re: insert into mit IBX und FB
 
Tja, das sieht schlüssig aus. Nun fällt mir wirklich nichts mehr ein.

mkinzler 23. Dez 2008 20:33

Re: insert into mit IBX und FB
 
Hab mir mal den Code nochmal angesehen. Es handelt sich ja um ein InsertSQL-Statemnet eines TIBDataSet. Ist von der Anwendung etwas komisch. Wie heisst den die Selectabfrage des DataSets?

DeddyH 23. Dez 2008 20:36

Re: insert into mit IBX und FB
 
Und die ganzen "Form1." sind überflüssig bzw. zuviel. Lass die mal ganz weg oder ersetze sie zumindest durch self. Aber daran wird es auch nicht liegen.

Hansa 23. Dez 2008 20:41

Re: insert into mit IBX und FB
 
Womit wurde denn das Script erstellt ?

karolus 23. Dez 2008 20:44

Re: insert into mit IBX und FB
 
Zitat:

Zitat von mkinzler
Hab mir mal den Code nochmal angesehen. Es handelt sich ja um ein InsertSQL-Statemnet eines TIBDataSet. Ist von der Anwendung etwas komisch. Wie heisst den die Selectabfrage des DataSets?

select * from RTitelAutor

karolus 23. Dez 2008 20:46

Re: insert into mit IBX und FB
 
Zitat:

Zitat von Hansa
Womit wurde denn das Script erstellt ?

Mit isql. Mit IBConole oder Flame Robin kann ich auf die DB mit allem drum und dran zugreifen.

mkinzler 23. Dez 2008 20:52

Re: insert into mit IBX und FB
 
Nimm mal eine eigene Kompo für das Insert oder verwende das DataSet richtig

Hansa 23. Dez 2008 21:26

Re: insert into mit IBX und FB
 
Zitat:

Zitat von mkinzler
Nimm mal eine eigene Kompo für das Insert oder verwende das DataSet richtig

Welche eigene Komponente ? :shock: Was soll er denn richtig verwenden ? Das macht er doch schon richtig : auf DB-Seite erst mal für Ordnung sorgen und die Probleme nicht noch ins eigene Programm verlagern.

Zitat:

Zitat von karolus
Mit isql. Mit IBConole oder Flame Robin kann ich auf die DB...

Das sind keine geeigneten Werkzeuge. Hänge mal die DB selbst dran.

mkinzler 23. Dez 2008 21:39

Re: insert into mit IBX und FB
 
Zitat:

Welche eigene Komponente ?
Nicht über .InsertSQL des DataSet
Zitat:

Das sind keine geeigneten Werkzeuge.
Und warum nicht?
Er verwendet das InsertSQL des DataSets falsch oder bist du da anderer Meinung?

Lemmy 24. Dez 2008 12:48

Re: insert into mit IBX und FB
 
Hi,

Zitat:

Zitat von mkinzler
Zitat:

Welche eigene Komponente ?
Nicht über .InsertSQL des DataSet

Ich denke das ist der Fehler! Das Statement soll mit ExecSQL ausgeführt werden - also muss das entsprechend Insert-Statement meiner Meinung auch in DataSet.SQL.TExt stehen und nicht in InsertSQL.Text! Ändere das DataSet entsprechend ab oder verwende TIBQuery dafür. Das InsertSQL kommt IMHO erst dann zum tragen wenn Du
Delphi-Quellcode:
  DataSet.Insert;
  DataSet.ParamByName()....
  ....
  DataSet.Post;
machst (habe ich aber nicht ausprobiert).

Grüße
Lemmy

P.S.:@Hansa: Nur weil du IBExpert geil findest heißt das noch lange nicht, dass man nicht auch mit FlameRobin bzw. IB[O]Console eine Datenbank administrieren kann :-) Frohe Weihnachten!

mkinzler 24. Dez 2008 12:53

Re: insert into mit IBX und FB
 
Eigentlich muss man dann ja nicht den Parameter sondern das Feld setzen, welcher dann autonmatisch auf den Parameter gemappt wird.
Meine Vermutung ging in die selbe Richtung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.

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