![]() |
Datenbank: Fiebird • Version: 1.5 • Zugriff über: Fibplus
FibPlus SQL-Befels Reinfolge / abarbeitung
Hallo zusammen
zuerst nachträglich schöne Weihnachten und einen guten rutsch ins neue Jahr. Seit einiger Zeit versuche ich einen Im - Export in meiner Anwendung zu realisieren. Die Anwendung besteht aus mehreren Sparten. Das Problem ist das der Im-Export bei einigen geht ( Sparten ) bei anderen nicht :pale: obwohl er überall gleich realisiert wurde.... Wenn untenstehender Code ausgeführt wird und ich nebenbei einen SQL-Monitor mitlaufen lasse sehe ich das z.t Befehle übersprungen werden. :? Mir ist das völlig unlogisch. Könnt Ihr da witerhelfen?
Delphi-Quellcode:
Das Problem tritt hauptsächlich beim löschen auf ( das was übersprungen wird ).
procedure TDM_school.import_data(Sender: TObject);
begin DM.DB_Gideons.Connected := True; DM.Camps.Open; School.Open; School_D.Open; School_DD.Open; School_C.Open; School_S.Open; // // Extract the Zipfile // DM.ZipMaster.ExtrBaseDir := app_dir + 'exchange'; DM.ZipMaster.ZipFileName := app_dir + 'exchange\school.zip'; DM.ZipMaster.Extract; // // Erase of all Data in the Tables with Q_School_import do begin Close; SQL.Clear; SQL.Add ( 'DELETE FROM SCHOOL_DD'); ExecQuery; Close; SQL.Clear; SQL.Add ( 'DELETE FROM SCHOOL_D'); ExecQuery; Close; SQL.Clear; SQL.Add ( 'DELETE FROM SCHOOL_C'); ExecQuery; Close; SQL.Clear; SQL.Add ( 'DELETE FROM SCHOOL_S'); ExecQuery; Close; SQL.Clear; SQL.Add ( 'DELETE FROM SCHOOL'); ExecQuery; Close; // // School.Close; // School_D.Close; // School_DD.Close; // School_C.Close; // School_S.Close; // // // School.Open; // School_D.Open; // School_DD.Open; // School_C.Open; // School_S.Open; // Import of all Data in exchange/ *.fibplus // Close; SQL.Clear; SQL.Add ( 'insert into SCHOOL ( ID, C_NR, U_NR, NAME, KIND, TITLE, STR, PLZ, CITY, TEL, FAX, EMAIL, HOMEPAGE, SCHOOLJ, NUMBER, WORKER, ACCEPTANCE, STATUS, NOTE, NC, CS, L_UPDATE, STAT_UPDATE, STAT_DEL, OPT )' + 'values ( :ID, :C_NR, :U_NR, :NAME, :KIND, :TITLE, :STR, :PLZ, :CITY, :TEL, :FAX, :EMAIL, :HOMEPAGE, :SCHOOLJ, :NUMBER, :WORKER, :ACCEPTANCE, :STATUS, :NOTE, :NC, :CS, :L_UPDATE, :STAT_UPDATE, :STAT_DEL, :OPT )'); BatchInputRawFile(app_dir + 'exchange/school.fibplus'); Close; SQL.Clear; SQL.Add ( 'INSERT INTO SCHOOL_D (ID, C_NR, U_NR, ID_AREA, D_DATE, D_C_PERSON, D_C_THRU, D_NOTE, L_UPDATE, STAT_UPDATE, STAT_DEL)' + 'values ( :ID, :C_NR, :U_NR, :ID_AREA, :D_DATE, :D_C_PERSON, :D_C_THRU, :D_NOTE, :L_UPDATE, :STAT_UPDATE, :STAT_DEL)'); BatchInputRawFile(app_dir + 'exchange/school_d.fibplus'); Close; SQL.Clear; SQL.Add ( 'INSERT INTO SCHOOL_DD (ID, C_NR, U_NR, ID_D, BIBEL_TYPE, AMOUNT, L_UPDATE, STAT_UPDATE, STAT_DEL)' + 'values ( :ID, :C_NR, :U_NR, :ID_D, :BIBEL_TYPE, :AMOUNT, :L_UPDATE, :STAT_UPDATE, :STAT_DEL)'); BatchInputRawFile(app_dir + 'exchange/school_dd.fibplus'); Close; SQL.Clear; SQL.Add ( 'INSERT INTO SCHOOL_C (ID, C_NR, U_NR, ID_AREA, C_TITLE, C_NAME, C_FIRSTNAME, C_POSITION, C_TEL_1, C_TEL_2, C_EMAIL, C_NOTE, L_UPDATE, STAT_UPDATE, STAT_DEL)' + 'values ( :ID, :C_NR, :U_NR, :ID_AREA, :C_TITLE, :C_NAME, :C_FIRSTNAME, :C_POSITION, :C_TEL_1, :C_TEL_2, :C_EMAIL, :C_NOTE, :L_UPDATE, :STAT_UPDATE, :STAT_DEL)'); BatchInputRawFile(app_dir + 'exchange/school_c.fibplus'); Close; SQL.Clear; SQL.Add ( 'insert into SCHOOL_S ( ID, C_NR, U_NR, TY, Q, YT, QT, L_UPDATE, STAT_UPDATE, STAT_DEL )' + 'values ( :ID, :C_NR, :U_NR, :TY, :Q, :YT, :QT, :L_UPDATE, :STAT_UPDATE, :STAT_DEL )'); BatchInputRawFile(app_dir + 'exchange/school_s.fibplus'); end; // Delete the .fibplus after Import DeleteFile ('exchange\school.fibplus'); DeleteFile ('exchange\school_d.fibplus'); DeleteFile ('exchange\school_dd.fibplus'); DeleteFile ('exchange\school_c.fibplus'); DeleteFile ('exchange\school_s.fibplus'); end; Anschliesend entstehen dann natürlich Probleme beim Import. Bin für jede Hilfe dankbar. Shalom Manfred |
Re: FibPlus SQL-Befels Reinfolge / abarbeitung
Hallo manfred_h,
schau Dir vielleicht nochmal die SQLs an. Normalerweiser werden SQL Statements mit einen Semikolon abgeschlossen. Anstatt einem Delete * nimm truncate. Ist schneller. Falls du Transactionsteuerung verwendest, solltest du nach den delete auch ein commit senden, sofern du nicht autocommit aktiviert hast. Vielleicht verbindest du alle SQL in ein Statement, anstatt jedes einzel zu senden. Vielleicht hilft dir das ja. |
Re: FibPlus SQL-Befels Reinfolge / abarbeitung
Zitat:
Die SQL Statements sollten eigentlich ok sein da wenn ich sie Automatisch von Fibplus erzeugen lasse auch kein Semikolon haben. Das mit truncate habe ich mir angeschaut aber in meiner Doku wir truncate nur hierfür gebraucht. ?? >procedure Truncate; > >Description > >Use Truncate to limit the size of the Blob data. Calling Truncate when the current position is 0 >will clear the contents of the Blob field. >Note: Do not call Truncate when the TFIBBlobStream was created in bmRead mode. Autocomit ist aktiviert. Das setsame ist ja das es bei manchen "Sparten" einwandfrei geht. Könntest Du mir sagen wie ich alle ( die 5 ) Tabellen mit einem SQL Statement lösche? Manfred |
Re: FibPlus SQL-Befels Reinfolge / abarbeitung
Mit Verlaub gesagt : das sieht IMHO ziemlich haarsträubend aus. :shock: Was wird gelöscht und was wird danach inserted ? Was ist der genaue Zweck ?
Ah, roter Kasten. Zitat:
SQL-Code:
DELETE FROM TableX
|
Re: FibPlus SQL-Befels Reinfolge / abarbeitung
Zitat:
den Batch Files >> BatchInputRawFile(app_dir + 'exchange/school.fibplus') eingelesen werden. Der Zweck ist das wenn mehrere User mit dem Programm arbeiten können sie die Daten Untereinander austauschen. Habe leider keinen bessren Weg mit Fibplus gefunden als mit dem BatchInputRawFile. Zitat:
Tipp bekomme wie ich was verbesern kann dann versuche ich das natürlich. :) Aus diesem Grund habe ich nachgeschaut wie das der Editor von Fibplus macht. Zitat:
Von wegen haarsträubend: Das ist mein erstes Programm und ich bin bemüht es andauer zu verbessern. :coder2: wirklich.. Shalom Manfred |
Re: FibPlus SQL-Befels Reinfolge / abarbeitung
Mit haarsträubend meine ich so etwas unübersichtliches :
Zitat:
Delphi-Quellcode:
Wie wäre es, das ganze so zu machen :
Close;
SQL.Clear; SQL.Add ( 'insert into SCHOOL ( ID, C_NR, U_NR, NAME, KIND, TITLE, STR, PLZ, CITY, TEL, FAX, EMAIL, HOMEPAGE, SCHOOLJ, NUMBER, WORKER, ACEPTANCE, STATUS, NOTE, NC, CS, L_UPDATE, STAT_UPDATE, STAT_DEL, OPT )' + 'values ( :ID, :C_NR, :U_NR, :NAME, :KIND, :TITLE, :STR, :PLZ, :CITY, :TEL, :FAX, :EMAIL, :HOMEPAGE, :SCHOOLJ, :NUMBER, :WORKER, :ACCEPTANCE, :STATUS, :NOTE, :NC, :CS, :L_UPDATE, :STAT_UPDATE, :STAT_DEL, :OT )');
Code:
Delphi wird dann bei einem Schreibfehler genau in der Zeile stehen, wo ein Schreibfehler drin ist. "Unknown Tablefield" oder so. Bei dem Klartext-SQL zwar auch, aber dann wäre lediglich die Zeile gefunden und nicht der Fehler. Der ist dann aber auch in einer ellenlangen Zeile kurzfristig zu finden. Als Hellseher zumindest. :mrgreen:
DS.insert;
DS.FindField ('ID').AsInteger := ID; DS.FindField ('C_NR').AsInteger := // wo der Wert herkommt ist im Prinzip egal DS.FindField ('U_NR').AsInteger := // wo der Wert herkommt ist im Prinzip egal // weitere Tabellen-Felder bestücken DS.Post; OT : wie habe ich das PRE fabriziert ? :shock: |
Re: FibPlus SQL-Befels Reinfolge / abarbeitung
Hallo Hansa
besten Dank werde es ausprobieren! Was meinst Du mit: OT : wie habe ich das PRE fabriziert ? Manfred |
Re: FibPlus SQL-Befels Reinfolge / abarbeitung
Hallo Hansa
danke nochmals für Deine Tipps und auch Dir Ozz. Es funktioniert nun. Noch einen schönen Abend Shalom Manfred |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 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