![]() |
Datenbank: MSSQL • Version: Express • Zugriff über: ADO
Datenimport: DS einfügen oder ersetzen, wie am geschickteste
Hallo!
Ich muss Daten aus einer Textdatei in eine DB importieren, was auch grundsätzlich funktioniert. Aber: Dieser Import wird nicht nur einmalig stattfinden, sondern vermutlich in regelmäßigen Abständen (es handelt sich um Daten, die aus SAP kommen und sich ändern können), d.h. Datensätze können neu dazu kommen, oder bereits vorhanden sein. Ich muss demnach entweder ein INSERT machen oder ein UPDATE. Jetzt kann ich mit einem SELECT prüfen, ob der DS bereits existiert und danach entsprechend verfahren, aber das kommt mir nicht sehr elegant vor. Wie kann ich das am besten bewerkstelligen, ggf. in einem Query-Aufruf? Guido |
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
Zitat:
Du wirst um diesen Weg nicht herumkommen. Um das ganze nicht auf dem Client zu machen würde ich eine SP vorschlagen. Dann läuft das SELECT "nur" auf dem Server und es werden keine unnötigen Daten übertragen. |
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
Wie wäre es einfach das ChangeDatum als Feld in die Tabelle schreiben- Dann musst du nur noch wissen wann der letze Import/export gemacht wurde, und kannst einfach mit select alles neuere auslesen. So würde ich es machen.
Thorben |
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
mit
![]() |
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
Zitat:
Zitat:
@Thorben_Ko: Entweder ich verstehe das nicht ganz, oder es löst mein Problem nicht. Ich muss ja trotzdem vorher prüfen, ob der Datensatz eingefügt oder geändert werden soll. @Sharky: Ich kenn mich ja sowas von gar nicht mit SP aus. Gibt es da ein gescheites Tutorial dazu? |
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
Zitat:
|
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
@mkinzler: Ich gebe zu, dass ich der Meinung war mit SQL Server 2005 Express die neueste Version zu haben. Gut, da habe ich mich geirrt, allerdings werde ich das zunächst auch mal nicht ändern (wollen).
Wird so etwas in der Art funktionieren? IF NOT EXISTS (SELECT TP FROM TEPL WHERE TP = :pTP) THEN INSERT INTO TEPL... usw. ELSE UPDATE... usw. |
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
Ich habe es jetzt hingekriegt:
Delphi-Quellcode:
Es funktioniert und ist auch hinreichend schnell für meine Anwendung.
SQL.Add('IF EXISTS (SELECT TP FROM TEPL WHERE TP=:pSTP)' +
' BEGIN' + ' UPDATE TEPL SET BEZ=:pUBEZ, KST=:pUKST, ANL=:pUANL, ANR=:pUANR, STAT=:pUSTAT' + ' WHERE TP=:pUTP' + ' END' + ' ELSE' + ' INSERT INTO TEPL (TP, BEZ, KST, ANL, ANR, STAT)' + ' VALUES(:pITP, :pIBEZ, :pIKST, :pIANL, :pIANR, :pISTAT);'); |
Re: Datenimport: DS einfügen oder ersetzen, wie am geschickt
Ich mach das immer anderst:
(Keine Ahnung, ob das performant oder glücklich oder schön ist. Das ist mir aber egal. Es funktioniert. ;-))
Delphi-Quellcode:
Query.SQL = 'SELECT Feld_1, Feld_2, ..., Feld_n FROM tabelle WHERE Feld_x = irgendwas';
Query.Open; if Query.Locate('Feld_a, Feld_b, Feld_c', VarArrayOf([Wert_1, Wert_2, Wert_3]), [loCaseInsensitive]) then begin Query.Insert; // Felder setzen, die nur bei insert gesetzt werden sollen Query.FieldByName('Feld_x').AsString = 'abcd'; end else begin Query.Edit; // Felder setzen, die nur bei update gesetzt werden sollen Query.FieldByName('Feld_y').AsString = 'efgh'; end; // Felder setzen, die immer gesetzt werden sollen Query.FieldByName('Feld_z').AsString = 'ijkl'; // in DB eintragen Query.Post; Query.Close; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 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