Entwickler-Ecke

Datenbanken - Firebird SQL Problem


Matthias-K - Mi 27.04.05 10:09
Titel: Firebird SQL Problem
hi leutz,

ich habe diese thema bereits in einem anderen forum aufgegeben, aber es kam kein erfolg bei den angebrachten lösungsvorschlägen!

um aber alle möglichkeiten auszunutzen, möchte ich hier den link zu dem topic setzen, fals einer von euch noch ne idee hat, aber nicht in dem anderen forum vertreten ist!

http://www.dsdt.info/YaBBSe/index.php?board=2;action=display;threadid=25143


matthias


smiegel - Mi 27.04.05 10:20

Hallo,

anstatt einzelner Anführungszeichen, würde ich es mal mit doppelten versuchen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  with form1 do
  begin
    ZQuery1.SQL.Clear;
    ZQuery1.Text:='INSERT INTO Gastdb (Name) VALUES ("sdf")';
    ZQuery1.ExecSQL;
  end;


Matthias-K - Mi 27.04.05 10:38

resultat deines versuches:

column unknown sdf!

matthias


Lemmy - Mi 27.04.05 10:57

Hi Matthias,

dich habe ich total vergessen....

Wenn das Statement in einer Konsolenanwendung tut, dann liegt das Problem vermutlich an Zeos. Welche Version hast Du da? Wenn Du die aktuelle Version hast, kannst Du mir mal die Sourcen und die Datenbank zumailen?

Alternativen zu den kostenlosen Zeos gibt es kaum: Die UIB kosten zwar ncihts, sind aber noch nicht so weit wie Zeos, sind aber meiner Meinung nach sehr stabil. Alle anderen kosten Geld (IBObjects, FIBPlus).

Lemmy


hansa - Mi 27.04.05 11:15

Moin,

zuerst die Standardfrage : was ist aus Lemmys Vorschlag geworden, das Ganze mal in IBExpert zu testen ? 8)

So muß es prinzipiell aussehen :


Quelltext
1:
2:
INSERT INTO Persons (LastName, Address)
VALUES ('Rasmussen', 'Storgt 67')


Beispiel ist von hier abgekupfert :

http://www.w3schools.com/sql/sql_insert.asp

Die Seite ist übrigens dringend als Nachschlagewert für Syntax usw. zu empfehlen !! Die nächste Frage ist, warum du das im Klartext schreibst ? Auch in Zeos dürfte das Dataset wissen, wie das Insert auszusehen hat. Insofern würde ein schlichtes DS.Insert; ausreichen.


Lemmy - Mi 27.04.05 11:57

user profile iconhansa hat folgendes geschrieben:

zuerst die Standardfrage : was ist aus Lemmys Vorschlag geworden, das Ganze mal in IBExpert zu testen ? 8)


Mööönsch Hansa... hat er doch schon längst versucht: Hat auch geklappt... Außerdem habe ich empfohlen, das in ner Konsole zu machen, nicht speziell in IBExpert ;-)))


Ist aber schon seltsam... Entweder hat er ne alte Zeos-Version oder die haben da wirklich ne Macke....

Grüße
Lemmy


hansa - Mi 27.04.05 12:27

Da sieht man, was bei Cross-Postings rauskommt : kein Zusammenhang. 8) Ich suche mir doch nicht in 3 Foren ein und dieselbe Frage zusammen. :shock: IBexpert habe ich bewußt genannt, denn wenn da "always capitalize database names" angekreuzt ist, dann fällt zumindest ein möglicher Fehler mit Groß/Kleinschreibung raus. Daß die Zeos nichts taugen weiß ich auch. :mrgreen:


Matthias-K - Mi 27.04.05 15:16

den link hab ich gesetzt, um mehr leute zu ereichen!

tut mir leid, wenn ich damit verwirrung geschaffen habe!

aber um wieder auf das problem zu kommen:

ich hab den sql string in der iboConsole getestet! nocheinmal! er funktioniert!

dann hab ich diesen string 1 zu 1 in mein programm übernommen! es meckert wenigstens nicht mehr!!! alleridings ist der datensatz nicht in der tabelle drin!


Delphi-Quelltext
1:
2:
3:
4:
5:
    
  ZQuery1.SQL.Clear;
  ZQuery1.sql.Add('INSERT INTO GASTDB (Name, Vorname)');
  ZQuery1.sql.Add('VALUES (''Test'', ''Test'')');
  ZQuery1.ExecSQL;


autocommit is auf true!


was mir aufgefallen ist, wenn ich in der iboconsole per sql dieses insert durchführe, muss ich für die entgültige übernahme noch so einen blöden button drücken!
allerdings kann ich diese nicht lesen, da ich die sprache ne kann! sie lautet:

Zitat:

Salva Dataset e salva e mantieni transazione corrente


irgendwas fehlt, das ich den datensatz irgendwie bestätigen muss! habs per manuellem commit versucht, aber ging auch nicht!


Lemmy - Mi 27.04.05 15:58

Die IBOConsole mag ein Commit im Script nicht so gerne wie ein Commit per Iconklick.

Hast Du die aktuelle Version von IBOConsole? Ich habe zumindest bei mir noch nie Probleme mit italienischen Fehlermeldungen gehabt....

Wenn Dein Proggy inzwischen nicht mehr meckert, dass der Datentyp falsch ist, ist doch schon mal was. Die Zeos unterstützen eigentlich einen automatischen Transaktionsmodus, aber nur, wenn Du die Transaktion nicht selbst startest, in diesem Fall musst Du sie auch wieder manuell beenden. Hast Du so was gemacht?

Lemmy


Matthias-K - Mi 27.04.05 16:04

ich hab ja kein commit im script! ich dachte nur, wenn man auf execute query in der iboconsole geht, das alle änderungen wirksam werden!

naja, mit diesem schönheitsfehler kann ich leben!


allerdings ist mir das aus meinem programm heraus noch ne so klar, warum er es nicht in die datenbank schreibt!


hab z.z. 2 datensätze in der db, und will den 3. anlegen, er meckert nicht, und ich freu mich schon fast das es geht, aber beim blick in die db kamen mir wiedereinmal die tränen! *g*

was meinst du mit transaktion starten und beenden?


Lemmy - Mi 27.04.05 16:32

machst Du irgend was in der Art:


Delphi-Quelltext
1:
ZConnection1.StartTransaction;                    


vor dem Ausführen der Query?

Lemmy


Matthias-K - Mi 27.04.05 16:35

kurz und knapp beantwortet: nein!


Lemmy - Mi 27.04.05 19:11

Die aktuellste Version der Zeos hast Du? Irgend was mit 6.5.1 stable...

Lemmy


Matthias-K - Do 28.04.05 08:56

ja, habe ich!

inclusive der beiden patches!

matthias


Matthias-K - Fr 29.04.05 13:52

hat denn niemand eine idee, was da falsch laufen könnte?

könnte ich was übersehen haben?

könnte die fehlermeldung, wenn ich über ein ztable gehe, die da kommt, aufschluss über das problem geben: datenmenge nur zum lesen! (oder so ähnlich, also ein fehler, das die datenmenge nur zum lesen ist)

matthias


Lemmy - Fr 29.04.05 14:50

Hi Michael,

ich weiß leider auch keinen Rat mehr, bis auf: schick mir die Datenbank und den Code, dann schaue ich den mir über WE an.

Lemmy


rkoch - Mi 25.05.05 11:30

Funktioniert es eventuell mit parambyname?

insert into table name1, name2 values(:name1,:name2);
parambyname('name1').asstring:='Wert'

Bei mysql hatte ich schon mal Probleme wegen dem Datentyp. So hatte es aber funktioniert.


Lemmy - Mi 25.05.05 11:40

Hi,

ich antworte jetzt einfach mal für Matthias:

Ich habe mir das Problem damals angeschaut und festgestellt, dass es keines war bzw. dass Matthias das Problem war ;-)) Hat sich also erledigt!

Lemmy