![]() |
Re: hmm,
Zitat:
Wenn Du das kapiert hast, was die anderen so geschrieben haben dann vergiss die leere Datenmenge einfach... Wenn Du es dennoch wissen willst, dann schreib nochmal, nicht dass ich dich noch mehr verwirre.... Grüße Lemmy |
bist hoffentlich nicht beleidigt. Ich mach jetzt einfach notfalls "Try and Error" :mrgreen:
|
Guten Morgen,
Zitat:
Grüße Lemmy |
Re: Insert SQL
Beschäftigt sich derzeit noch jemand mit dem Problem ?
Ich habe auf Grund eurer Beiträge folgenden Code versucht
Delphi-Quellcode:
Die Daten verschwinden auch zunächst im DBGrid.
DM.IBTagesplan.Close;
DM.IBTagesplan.DeleteSQL.Text := 'Delete from UDAT'; //DM.IBTagesplan.InsertSQL.Text := 'Insert Into UDAT (Patient) VALUES (''BlaBla'')'; DM.IBTransaction.Commit; DM.IBTagesplan.Open; Bei Neustart des Programmes sind sie aber wieder vorhanden. Mit
Delphi-Quellcode:
bekomme ich nur die Fehlermeldung "Verwenden Sie Open für eine Select-Anweisung"
DM.IBTagesplan.ExecSql
|
Re: Insert SQL
tausche mal commit und open
|
Re: Insert SQL
es funktioniert einfach nicht:
Mit dieser Anweisung sollte doch eigentlich ein neuer Datensatz eingefügt werden:
Delphi-Quellcode:
DM.IBTagesplan.Close;
DM.IBTagesplan.InsertSQL.Text := 'Insert Into UDAT (ID,UNTERSUCHUNGSDATUM, PATIENT) VALUES (50,''15.10.2005'',''Thomas Cook'')'; DM.IBTagesplan.Open; DM.IBTransaction.Commit; |
Re: Insert SQL
hallo ralf, ich mache soetwas immer mit einer query und zwar so
Delphi-Quellcode:
also ich versuche immer paramisierte felder zu nehmen .versuche es mal auf dein dataset umzusetzen.
with DM1.IBQuery3 do
Begin Close; SQL.Clear; SQL.Add('insert Into Tab_Mitarbeiter (VNummer , Name , Vorname , Beruf , Firmen_Id)'+ 'values (:VNummer,:Name,:Vorname,:Beruf,:Firmen_id)'); ParamByName('VNummer') .AsString := Edit1.Text; ParamByName('Name') .AsString := Edit3.Text; ParamByName('Vorname') .AsString := Edit2.Text; ParamByName('Beruf') .AsString := Edit4.Text; ParamByName('Firmen_Id').AsInteger:= x[ComboBox1.ItemIndex]; Open; end; DM1.IBTrans1.Commit; raik edit :ich hoffe du hast nicht 800*600 als auflösung, bei mir sieht es schrecklich aus |
Re: Insert SQL
Wie kiar das beschrieben hat, so geht es im Prinzip. Wenn schon, dann aber direkt eine stored Procedure verwenden. Ja, man lernt eben nie aus. :zwinker: Das von mir anfangs eingeführte Lager-Beispiel habe ich so realisiert (Menge soll vom Bestand abgezogen werden) :
Delphi :
Delphi-Quellcode:
Voraussetzumg ist natürlich, daß diese SP in der DB definiert ist.
procedure SchreibeLager (menge : integer);
begin with EingDM do begin // EingDM : DataModule LagSP.ParamByName('ID_ART').AsInteger := ArtDS.FieldByName ('ID').AsInteger; ... LagSP.ParamByName('MENGE').AsInteger := menge; LagSP.ExecProc; end; end; DB:
SQL-Code:
Das ist jetzt allerdings noch stark verkürzt. Nicht relevante Felder und Statements habe ich weggelassen.
SET TERM ^ ;
CREATE PROCEDURE LAGSP ( ID_ART INTEGER, MENGE INTEGER) AS DECLARE VARIABLE AENDERN INTEGER; begin AENDERN = -1; SELECT ID FROM LAGER WHERE ID_ART= :ID_ART INTO :AENDERN; IF (AENDERN < 0) THEN BEGIN INSERT INTO LAGER8 (ID_ART,MENGE) VALUES (:ID_ART,-1*:MENGE); END ELSE BEGIN UPDATE LAGER SET MENGE = MENGE - :MENGE WHERE ID_ART = :ID_ART; END suspend; end ^ SET TERM ; ^ Außerdem ist ein guter Trick integriert : nämlich die DB entscheiden zu lassen, ob ein INSERT oder ein UPDATE ausgeführt werden muß. Würde ich auf keinen Fall vernachlässigen :!: Es muß also im Programm nur "SchreibeLager" ausgeführt werden, egal ob der Lagerbestand schon existiert oder nicht !! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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