Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi AutoInc bei SQL-Insert (https://www.delphipraxis.net/67344-autoinc-bei-sql-insert.html)

Angel4585 13. Apr 2006 10:57

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery

AutoInc bei SQL-Insert
 
Hallo zusammen,

da ich jetzt endlich weis wie ich mit Queries in ne DB schreibe, tun sich auch schon die ersten Fehler auf.

der Erste ist gleich mal folgender:

ich habe die Felder

ID Typ AUTOINC
Bez Typ VarChar(100);

wenn ich jetzt mit insert einen neuen DS anlege, sollte dich das Feld ID automatisch erhöht werden oder?
Bei mir geschieht das nicht. Muss ich dazu noch was bestimmtes angeben?

Jetzt sieht es gerade so aus. ich vermute ich muss bei Values was reinschreiben, aber was?

SQL-Code:
insert into "Artikel.db"
  (ID, Bez)
values
  (:ID, :Bez)
MfG :angel:

RavenIV 13. Apr 2006 11:04

Re: AutoInc bei SQL-Insert
 
du darfst der Query die ID nicht mitgeben, weil die automatisch erhöht wird.

Angel4585 13. Apr 2006 11:05

Re: AutoInc bei SQL-Insert
 
ja aber wenn ich sie nicht mitgebe wird sie trotzdem nicht erhöht...

:shock: ich glaub das Problem iss nich das SQL-Statement, sondern das "Post", das funzt scheinbar nciht richtig.. der schreib garnix rein :cry:

mkinzler 13. Apr 2006 11:49

Re: AutoInc bei SQL-Insert
 
Zeig mal den ganzen Code des Inserts.

marabu 13. Apr 2006 11:54

Re: AutoInc bei SQL-Insert
 
Hallo Martin,

Query und Post - vermischst du da vielleicht etwas?

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  with Query do
  begin
    SQL.Text := 'INSERT INTO artikel(bez) values(:bez)';
    Params.ParamValues['bez'] := 'es geht doch';
    ExecSQL;
  end;

  with Query do
  begin
    SQL.Text := 'SELECT * FROM artikel WHERE 1 = 0';
    RequestLive := true;
    Open;
    Append;
    FieldValues['bez'] := 'oder so';
    Post;
    Close;
  end;
end;
Grüße vom marabu

Angel4585 13. Apr 2006 11:57

Re: AutoInc bei SQL-Insert
 
Zuerst wird die Tabelle mit:
SQL-Code:
'CREATE TABLE "Artikel.db"('+
         'ID AUTOINC,'+
         'Bez VARCHAR(10),'+
         'PRIMARY KEY(ID));';
erstellt.

Ich hab eine Query die mir die Tabelle öffnet und anzeigt:
SQL-Code:
SELECT * FROM "Artikel.db"
Dann eine TUpdateSQL - Kompo in deren Insertteil das steht:

SQL-Code:
insert into "Artikel.db"
(sollte reichen oder? :gruebel: )

dieser Insertteil wird - wenn ich das recht verstanden hab - automatisch bei einem Append aufgerufen.
danach schreibe ich in ein DBEdit etwas rein undlöse ein Post aus. Im grid wird das Eingegebene angezeigt, allerdings steht das nicht in der physikalischen tabelle drin, Heisst: Wenn ich das Prog schliesse sind die Daten wieder weg.


diese TUpdateSQL - Kompo ist der Query zugeordent. Ausserdem ist die Eigenschaft CachedUpdate = True, da sonst nur lesen ist bei der Query.
UpdateMode der Query ist upWhereAll, RequestLive ist im Moment False, bringt aber nix wenn ichs auf True setze.

mkinzler 13. Apr 2006 11:59

Re: AutoInc bei SQL-Insert
 
SQL-Code:
insert into "Artikel.db";
reicht nicht. Verwende am besten die Funktion der IDE um die Querystrings richtig zu setzen. (Einfach Doppelklick auf Kompo).

Angel4585 13. Apr 2006 12:16

Re: AutoInc bei SQL-Insert
 
Zitat:

Zitat von mkinzler
SQL-Code:
insert into "Artikel.db";
reicht nicht. Verwende am besten die Funktion der IDE um die Querystrings richtig zu setzen. (Einfach Doppelklick auf Kompo).

Die macht dann aber das Autoinc-feld au mit rein

Edit: und egal bei welcher Schlüssel / Aktualisierungs konstelation: Es geht nicht... :wall:

mkinzler 13. Apr 2006 12:21

Re: AutoInc bei SQL-Insert
 
Die Funktion der IDE ist rein "mechanisch". In diesem Fall mußt du das Feld per Hand aus Abfrage entfernen. Beim Update kannst du eigentlich auch alle Felder außer diesem aus der where-clause entfernen.

Jelly 13. Apr 2006 20:28

Re: AutoInc bei SQL-Insert
 
Auch wenn du das mit dem Insert Befehl jetzt hinkriegst, so wirst Du weiterhin das Problem haben, dass nach dem Posten dir die ID unbekannt bleiben wird. Der Grund, weil erst nach dem Post die ID im DB System erstellt wird, und Du in Delphi aber keinen Rückwert nach dem Post kriegst. Was da hilft ist in der Tat einfach ein Close -> Open.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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 by Thomas Breitkreuz