AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FibPlus SQL-Befels Reinfolge / abarbeitung
Thema durchsuchen
Ansicht
Themen-Optionen

FibPlus SQL-Befels Reinfolge / abarbeitung

Ein Thema von manfred_h · begonnen am 28. Dez 2006 · letzter Beitrag vom 28. Dez 2006
Antwort Antwort
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#1

FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 15:27
Datenbank: Fiebird • Version: 1.5 • Zugriff über: Fibplus
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
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:
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;
Das Problem tritt hauptsächlich beim löschen auf ( das was übersprungen wird ).
Anschliesend entstehen dann natürlich Probleme beim Import.

Bin für jede Hilfe dankbar.

Shalom
Manfred
  Mit Zitat antworten Zitat
ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#2

Re: FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 17:24
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.
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 17:47
Zitat von ozz:
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.
Hallo ozz

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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 17:56
Mit Verlaub gesagt : das sieht IMHO ziemlich haarsträubend aus. Was wird gelöscht und was wird danach inserted ? Was ist der genaue Zweck ?

Ah, roter Kasten.

Zitat von manfred_h:
Die SQL Statements sollten eigentlich ok sein da wenn ich sie Automatisch von Fibplus erzeugen lasse auch kein Semikolon haben.
...
Könntest Du mir sagen wie ich alle ( die 5 ) Tabellen mit einem SQL Statement lösche?
Wenn sie automatisch vom SQL-Generator erzeugt wurden, wieso stehen sie dann im SQL-Klartext im Programm ? 5 Tabellen löschen ? In IBExpert die Tabelle anklicken und löschen. Soll nur der Inhalt gelöscht werden, dann wären es 5 Script-Zeilen DELETE FROM TableX
Gruß
Hansa
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 18:09
Zitat von Hansa:
Mit Verlaub gesagt : das sieht IMHO ziemlich haarsträubend aus. Was wird gelöscht und was wird danach inserted ? Was ist der genaue Zweck ?
Zuerst soll der Inhalt der Tabellen gelöscht werden und anschliesend der Inhalt aus
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 von Hansa:
Ah, roter Kasten.

Zitat von manfred_h:
Die SQL Statements sollten eigentlich ok sein da wenn ich sie Automatisch von Fibplus erzeugen lasse auch kein Semikolon haben.
...
Könntest Du mir sagen wie ich alle ( die 5 ) Tabellen mit einem SQL Statement lösche?
Wenn sie automatisch vom SQL-Generator erzeugt wurden, wieso stehen sie dann im SQL-Klartext im Programm ?
Das war als Beispiel gedacht zurzeit steht in der Query nichts drin. Wenn ich aber einen
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 Hansa:
5 Tabellen löschen ? In IBExpert die Tabelle anklicken und löschen. Soll nur der Inhalt gelöscht werden, dann wären es 5 Script-Zeilen DELETE FROM TableX
Danke werde es ausprobieren.
Von wegen haarsträubend: Das ist mein erstes Programm und ich bin bemüht es andauer zu verbessern.
wirklich..

Shalom
Manfred
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 19:40
Mit haarsträubend meine ich so etwas unübersichtliches :
Zitat von manfred_h:
Delphi-Quellcode:
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 )');
Ein falscher Buchstabe irgendwo in dem SQL-String und es kracht. Wo sind hier z.B. 2 Fehler enthalten ?
Delphi-Quellcode:
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 )');
Wie wäre es, das ganze so zu machen :

Code:
    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;
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.

OT : wie habe ich das PRE fabriziert ?
Gruß
Hansa
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 19:46
Hallo Hansa

besten Dank werde es ausprobieren!

Was meinst Du mit: OT : wie habe ich das PRE fabriziert ?

Manfred
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: FibPlus SQL-Befels Reinfolge / abarbeitung

  Alt 28. Dez 2006, 21:55
Hallo Hansa
danke nochmals für Deine Tipps
und auch Dir Ozz.

Es funktioniert nun.

Noch einen schönen Abend
Shalom
Manfred
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz