Entwickler-Ecke

Datenbanken - DBF-Datei leeren


hussl1 - Mo 23.05.11 22:58
Titel: DBF-Datei leeren
Hallo zusammen :)

nachdem ich in der Schule die Grundlagen in Delphi eingetrichtert bekommen habe versuche ich mich nun an meinem ersten Programm. Bisher läuft alles sehr gut.
Das Programm soll aus einer Acces-Datenbank Daten auslesen und dann in eine bereits vorliegende DBF/MDX Datei schreiben.

Es funktioniert soweit, nur ein Problem habe ich. Zum Programmablauf:

1. Acces-Daten auslesen
2. DBF-Datei leeren
3. DBF-Datei füllen

Beim ersten Programmdurchlauf wird die DBF korrekt geleert und dann mit den Access-Daten gefüllt.
Führe ich das Programm erneut aus, werden die Datensätze nicht mehr gelöscht sondern nur noch angehängt.
Abhilfe schaffen kann ich nur indem ich die dbf lösche und eine Sicherung einspiele. Dann geht es wieder,
aber nur einmal.

Datenverbindung läuft über eine ADOConnection und eine ADOQuery.

Der Verbindungsstring zur DBF lautet:


Quelltext
1:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\DB_Routenplaner\access\;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=18;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;                    


loginprompt ist false, connected ist true.

(nicht vom Verzeichnsnamen irritieren lassen, das hat mit Access nichts zu tun)

Die ADOQuery2 hat dann den Inhalt:DELETE * FROM FritzAdr; und hat die ADOConnection1 als Connection.

Über die ADOQuery1 lass ich dann die INSERT INTO laufen um die Datei zu füllen.

Das ganze sieht dann so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
procedure TFritzAdressliste.inFritzAdrSchreiben;
var
  i: integer;
  sqlstring, anzeigename, name, vorname, telefon, telefax: string;
  datensatz: TFritzAdresse;
begin
  // Leeren des vorhandenen Fritz-Adressbuches

  // SQL-Abfrage Starten

  FritzAdrZugriff.DataModule2.ADOQuery2.ExecSQL;

  // Zählen der vorzunehmenden Einträge
  i := Count;

  // Liste in Adressbuch schreiben

  While i-1>=0 do
    begin
      datensatz := TFritzAdresse(items[i-1]);
        anzeigename := datensatz.anzeigename;
        name := datensatz.name;
        vorname := datensatz.vorname;
        telefon := datensatz.telefon;
        telefax := datensatz.telefax;
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;

      i := i-1;

    end;

end;




Ich hoffe mit dieser Info könnt ihr etwas anfangen =)

Gruß

Matthias

Moderiert von user profile iconMartok: Tags hinzugefügt


Martok - Mo 23.05.11 23:17

Hallo!

Willkommen in der Entwickler-Ecke! :welcome:

Bitte verwende für Quellcode die entsprechenden [delphi]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG5dd201015b5433acb238df365f03b6a0}</span></span>                    

Wird:

Delphi-Quelltext
1:
var Test: integer;                    


Ähnlich gibt es auch [code]- und [sql]-Tags, wie ich sie oben mal nachgetragen habe.

Viele Grüße,
Martok


jaevencooler - Di 24.05.11 08:13

Guten Morgen,


ich bin zwar nicht der ausgewiesene ADO Experte, aber musst Du Deiner Transaction nicht auch irgendwie ein commit geben ?

Vielleicht sind die eingefügten Datensätze noch im Bearbeitungsmodus, und haben ein Record Lock ? bzw. ein Table Lock,
DBase Dateien benehmen sich da schon ein bischen seltsam, ab und zu.


Beste Grüße
Michael


zuma - Di 24.05.11 09:29

ich vermute auch mal, das da einfach nur ein commit fehlt.

füg mal die 3 Zeilen hinzu

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add('commit;'); 

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;


hussl1 - Di 24.05.11 15:36

Hallo zusammen,

habe den beschriebenen Code eingefügt und das Programm laufen lassen.

Ich erhalte nun die Fehlermeldung:

"Sie haben versucht eine Transaktion zu Ende zu führen (Commit) oder zurückzusetzen (Rollback), ohne zuvor die Begin-Trans-Methode zu verwenden."


Was hat es denn damit auf sich ?


Reinhard Kern - Di 24.05.11 23:05

user profile iconjaevencooler hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht sind die eingefügten Datensätze noch im Bearbeitungsmodus, und haben ein Record Lock ? bzw. ein Table Lock,
DBase Dateien benehmen sich da schon ein bischen seltsam, ab und zu.


Hallo,

seltsam schon, aber einfacher: DBF-Records werden nicht gelöscht, sondern erhalten nur einen Marker, dass sie gelöscht werden sollen. Endgültig verschwinden sie erst bei einem Reorg-Lauf.

Dass Dateien mit Löschmarker nicht mehr auftauchen sollen, muss man bei manchen Zugriffsprogrammen extra einstellen ("If not deleted" o.ä.). Ich wundere mich daher schon lange nicht mehr, wenn gelöschte Datensätze plötzlich wieder da sind.

Gruss Reinhard


hussl1 - Mi 25.05.11 13:15

Hallo,

das würde natürlich eine schlüssige Erklärung sein. Wie kann man so einen Reorg.-Lauf den aufrufen?
Habe festgestellt, dass sich die Dateigröße beim Löschen nicht verändert.
Vor dem ersten Durchlauf: 15 Mb
Nach dem ersten Durchlauf löschen: 15Mb , Excel zeigt leere Datenbank
Nach dem ersten Durchlauf: 45 Mb, Excel zeigt volle Datenbank
Nach dem zweiten Durchlauf: 75 Mb, Alte Daten noch da, neue angehängt.

Das würde doch dafür sprechen, dass mein Delete-Durchlauf nur Flags setzt?


Gruß

Matthias


jaenicke - Mi 25.05.11 13:42

Das nennt sich packen, aber ob das über OleDB geht... keine Ahnung.

Muss es denn unbedingt ausgerechnet eine DBase-Datenbank sein? Und wenn das sein muss, musst du darauf über den OleDB Provider zugreifen?

Es gibt auch Komponenten wie VK DBF 1.0.9 [http://vlad-karpov.narod.ru/Components.html#VK20DBF], die direkte Zugriffe ermöglichen. Und bessere Datenbanken als DBase gibt es sehr viele...


hussl1 - Mi 25.05.11 15:17

Hey,

ich bin auch kein Freund von dBase. Hat ja ewig gedauert bis die Connection mal lief.
Normalerweise nehme ich Access, habe ich nie Probleme mit. Aber ich hab ja das Programm geschrieben
um nicht alle meine Kontakte in Access und im Fritz!-Adressbuch doppelt zu verwalten (Mit Fritz
lasse ich meine Anrufe und Fax verarbeiten.)

Wie ich auf die Datenbank zugreife ist mir herzlich egal =) Ich habe halt die ADO genommen, da ich
in der Schule Delphi in Kombination mit SQL gelernt habe. Da war das keine große Umstellung.

Besten Dank für weitere Auskünfte =)

Matthias

PS: Wenn ich eine neue Komponente hinzufüge, steckt die dann in der EXE oder braucht man die dann auf jedem Rechner auf dem das Programm läuft?


jaenicke - Mi 25.05.11 15:22

Die genannte Komponente greift direkt auf die Datenbank zu ohne irgendwelche System-Komponenten. Es reicht die Exe und der Komponente musst du nur den Dateinamen sagen.


hussl1 - Mi 25.05.11 15:48

hm das hört sich doch prima an =)

das werde ich gleich mal probieren. Mal sehen wie weit ich komme =)


Reinhard Kern - Mi 25.05.11 16:28

user profile iconhussl1 hat folgendes geschrieben Zum zitierten Posting springen:
hm das hört sich doch prima an =)


Hallo,

bei DBF ist Packen und Reindizieren ein Vorgang, den man extra aufrufen muss. Ich habe zu meiner Produktions-Verwaltungssoftware ein (Uralt-)Tool geschrieben (siehe Screenshot) auf Basis der Codebase-Software. Im äussersten Notfall kann man auch ein altes DBase IV istallieren, damit geht es auch. Ich weiss allerdings nicht, unter welchen Windowsversionen das noch läuft. Das ist noch DOS mit Fenstern, durchaus bedienbar, aber an Kunden kann man sowas nicht mehr ausliefern.

Codebase ist eine Zugriffssoftware für DBF (DBase, Clipper, Foxpro), da kann man alles als C/C++ Funktion aufrufen, hochprofessionell, kostet aber.

Gruss Reinhard


Reinhard Kern - Mi 25.05.11 16:36

Hallo,

ganz anderer Ansatz: mach dir eine DBF-Datei mit 0 Records als Template, kopier sie als aktive, füll sie mit Werten und schmeiss sie nachher weg. Geht viel schneller und einfacher.

Gruss Reinhard


jaenicke - Mi 25.05.11 16:38

Die genannte Komponente hat dafür einfach den Befehl Pack... ;-)


hussl1 - Mi 25.05.11 16:53

wow,

ihr überhäuft mich ja hier mit lösungen, vielen dank dafür =). werde eines nach dem anderen durchgehen und schauen wie das so läuft.
Habe mir von besagter Homepage die Datei EDB107.zip geladen und wollte dann die Komponente hinzufügen.
Jetzt habe ich hier aber fast 20 Units, muss ich da jede einzeln hinzufügen?

Gruß

Matthias


jasocul - Mi 25.05.11 17:00

Man kann natürlich auch einfach die Datei direkt bearbeiten. Einfach die Anzahl der Datensätze im Header korrekt einstellen und die Datei an der richtigen Stelle abschneiden. Hier ein Link für die Datei-Struktur: http://www.dbase.com/knowledgebase/int/db7_file_fmt.htm

Allerdings kann man sich dann auch einfach immer eine leere Datei irgendwo ablegen und bei Bedarf kopieren. Ich glaube das hat Reinhard aber schon geschrieben.


jaenicke - Mi 25.05.11 17:07

user profile iconhussl1 hat folgendes geschrieben Zum zitierten Posting springen:
Habe mir von besagter Homepage die Datei EDB107.zip geladen und wollte dann die Komponente hinzufügen.
Jetzt habe ich hier aber fast 20 Units, muss ich da jede einzeln hinzufügen?
Das ist der Quelltext eines Tools... das brauchst du gar nicht...

Der erste Download reicht schon. Und in der Vkdbf2009.zip sind im Verzeichnis Bin auch Packages drin um die Komponente zu installieren...


hussl1 - Do 02.06.11 16:57

Hallo,

ich komme hier nicht so wirklich weiter. Habe nun mit Datei-->öffnen die Datei VKDBF2009.dpk geöffnet. Dann klicke ich rechts auf VKDBF2009.dpl und klicke dann auf installieren. Ich erhalte die Fehlermeldung: "Das Laden von Drittkomponenten und IDE-Addins ist bei dieser Version nicht lizenziert."

Ich verwende unsere Schulversion. Habe ich damit überhaupt die Chance Addins zu verwenden ?

Viele Grüße

Matthias


jaenicke - Do 02.06.11 17:01

Dann nutzt du also Turbo Delphi Explorer?

Da geht das so nicht, da musst du die Komponente manuell erstellen. Heißt: Bibliothekspfad setzen, die Unit VKDBFDataSet in die uses schreiben und dann per Code eine Instanz der Klasse erstellen, das müsste die TVKDBFNTX sein.


hussl1 - Do 02.06.11 17:35

Hey,

danke für die schnelle Antwort. Das geht aber alles etwas schnell :P
Ja ich nutze Turbo Delphi. Wusste gar nicht, dass es etwas anderes gibt =)
Also gut, ich muss das ganze in meine Uses aufnehmen.
Heißt ich muss die betreffende Unit in mein Projektverzeichnis kopieren.

Dann erstelle ich also ein Objekt der Klasse TVKDBFNTX


Delphi-Quelltext
1:
  TFritzDBF = class(TVKDBFNTX)                    


und kann dann mit diesem Objekt meine Datenbank bearbeiten?
Wenn ja, wie setze ich da den Pfad zur DBF?
Wie bearbeite ich dann die DBF?

Vielen Dank =)


jaenicke - Do 02.06.11 18:15

user profile iconhussl1 hat folgendes geschrieben Zum zitierten Posting springen:
Heißt ich muss die betreffende Unit in mein Projektverzeichnis kopieren.
Habe ich davon etwas geschrieben? Nein, das ist nicht nötig. :nixweiss:

Im Gegenteil, es ist nicht sinnvoll. Es reicht den Pfad in den Optionen in den Bibliothekspfad aufzunehmen.

user profile iconhussl1 hat folgendes geschrieben Zum zitierten Posting springen:
Dann erstelle ich also ein Objekt der Klasse TVKDBFNTX


Delphi-Quelltext
1:
  TFritzDBF = class(TVKDBFNTX)                    
Du musst ein Objekt der Klasse erstellen und nicht eine eigene Klasse ableiten...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
private
  FDatabase: TVKDBFNTX;

...
// z.B. FormCreate
FDatabase := TVKDBFNTX.Create(Self);
FDatabse.Tablename := ...;
(Müsste TableName sein, sonst schau was es da sonst gibt...)


hussl1 - Do 02.06.11 18:46

danke für deine geduld. habe das nun so ausgeführt. Jetzt denke ich wäre es mal ein ziel das Packen zu probieren.
[/delphi]


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TFritzAdressliste.inFritzAdrSchreiben;
var
  i: integer;
  sqlstring, anzeigename, name, vorname, telefon, telefax: string;
  datensatz: TFritzAdresse;
  FritzDB : TVKDBFNTX;
begin
  // Leeren des vorhandenen Fritz-Adressbuches

  FritzDB := VKDBFDataSet.TVKDBFNTX.Create();
  FritzDB.DBFFileName('D:\DB_Routenplaner\access\FritzAdr.dbf');
  FritzDB.Pack(true);

...



Jetzt muss ich aber in der Create einen AOwner: TComponent einfügen. Was hat es denn damit auf sich ? Bei Self bringt er einen Fehler...

[Pascal Fehler] FritzAdrDaten.pas(182): E2010 Inkompatible Typen: 'TComponent' und 'TFritzAdressliste'


Gruß Matthias


jaenicke - Do 02.06.11 19:26

Wenn das eine eigene Klasse ist, schreib einfach nil statt Self hin. Dann musst du dein Objekt aber auch irgendwo mit Free wieder freigeben.


hussl1 - Di 14.06.11 15:30

Hallo jaenicke,

mit nil funktioniert das wunderbar... was mache ich aber mit diesem nil? Was hat das für eine Funktion? Wie gebe ich mein Objekt wieder frei? Mit Destroy?


Delphi-Quelltext
1:
2:
3:
  FritzDB := VKDBFDataSet.TVKDBFNTX.Create(nil);
  FritzDB.DBFFileName := 'D:\DB_Routenplaner\access\FritzAdr.dbf';
  FritzDB.Pack(true);


Das macht er mal ohne Fehlermeldung durch, das ist doch schonmal was. Nur komme ich mit der Fülle an Funktionen und Prozeduren nicht zurecht.
Könntest du mir erläutern, mit welchen Befehlen ich nun die DBF leeren kann?

Vielen Dank,

Matthias


jaenicke - Di 14.06.11 15:46

user profile iconhussl1 hat folgendes geschrieben Zum zitierten Posting springen:
was mache ich aber mit diesem nil? Was hat das für eine Funktion?
Damit sagst du, dass das Objekt keinen Owner hat. du musst dich um die Freigabe also selbst kümmern.

user profile iconhussl1 hat folgendes geschrieben Zum zitierten Posting springen:
Wie gebe ich mein Objekt wieder frei? Mit Destroy?
Nein, das darf man nicht direkt aufrufen, benutze immer Free.


hussl1 - Di 14.06.11 17:32

Ok,

dann wäre das auch schon mal geklärt.

Ich dachte an so etwas wie:


Delphi-Quelltext
1:
2:
  FritzDB.SetRange();
  FritzDB.ClearRange;


Nur ist mir nicht klar was ich da an Werten übergeben muss. Gibt es da eine Dokumentation oder kannst du mir da weiterhelfen?

Delphi-Quelltext
1:
  FritzDB.SetRange(fieldlist: string; fieldvalues: array of TVarRec)                    


Dazu gibt es noch 3 weitere Prozeduren mit gleichen Namen, aber mit anderen Paramtern.

Gruß

Matthias


jaenicke - Di 14.06.11 17:43

Damit änderst du ja nur die Range, mehr nicht.

So ca. sollte es gehen, keine Ahnung ob es da ne schnellere Lösung gibt, hab grad keine Zeit zum Nachschauen, bin auf Arbeit...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  VKDBFNTX1.AccessMode.OpenReadWrite := True;
  VKDBFNTX1.Active := True;
  while not VKDBFNTX1.Eof do
  begin
    VKDBFNTX1.Deleted := True;
    VKDBFNTX1.Next;
  end;
  VKDBFNTX1.Pack(False);


hussl1 - Di 21.06.11 17:41

Heyhey,

habe das so ausprobiert und siehe da:

Es funktioniert einwandfrei. Programm läuft flott und ohne Fehlermeldungen.
Leider ist dies zu schön um wahr zu sein...
Wenn ich das aktualisierte Adressbuch mit Fritz öffne, dann explodiert der Speicher.
Das Programm reagiert nicht mehr und der Arbeitspeicher schnellt nach oben (So um 30Mb pro Sekunde)
Woran könnte das denn liegen?
Genau das wollte ich verhindern, habe extra eine Originaldatei bearbeitet und nicht neu erstellt wie
vorgeschlagen wurde und dennoch...
Habe mal das aktualisierte Adressbuch mit einem Adressbuch verglichen bei dem die Importfunktion genutzt
wurde. Die sehen in Excel genau identisch aus. In der Spalte TRANSPROT haben dort auch alle Datensätze den Wert "A" hinterlegt.

Ich bin gerade echt am verzweifeln :(
Welche Infos könnte ich euch denn geben um da weiter zu kommen ?

PS: An jaenicke ein RIESIGES DANKESCHÖN dafür, dass du mir so geduldig erklärt und geholfen hast =)


jaenicke - Di 21.06.11 17:52

Du könntest einmal ein Tool zum Vergleichen von Dateien benutzen und schauen worin sich die Dateien unterscheiden. Du kannst zum Beispiel den Hexeditor HxD [http://www.delphi-forum.de/viewtopic.php?t=36173] dafür benutzen.


hussl1 - So 26.06.11 19:34

Hallo,

habe das nun ausgeführt. Habe mit dem Programm Fritz!-Programm ein neues Adressbuch angelegt und mit 2 sinnlosen Einträgen gefüllt. Dann habe ich mein Programm so abgeändert, dass es das Adressbuch leert und dann die 2 sinnlosen EInträge erneut durchführt. Erstmal den Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
procedure TFritzAdressliste.inFritzAdrSchreiben;
var
  i: integer;
  sqlstring, anzeigename, name, vorname, telefon, telefax: string;
  datensatz: TFritzAdresse;

begin


  // Fritz Adressbuch leeren

  FritzAdrleeren();

  mFormular.Form1.Memo1.Lines.Add('Schreibe Daten in Fritz-Adressbuch... Dies kann etwas dauern.');

      
        anzeigename := 'dfgdfg';
        name := 'fgfg';
        vorname := 'fgfgfg';
        telefon := '';
        telefax := '';
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;


        anzeigename := 'fgfgfgf';
        name := 'fgfgf';
        vorname := 'fgfg';
        telefon := '';
        telefax := '';
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;

  {
  // Zählen der vorzunehmenden Einträge
  i := Count;

  // Liste in Adressbuch schreiben

  While i-1>=0 do
    begin
      datensatz := TFritzAdresse(items[i-1]);
        anzeigename := datensatz.anzeigename;
        name := datensatz.name;
        vorname := datensatz.vorname;
        telefon := datensatz.telefon;
        telefax := datensatz.telefax;
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;

      i := i-1;

    end;


Das funktioniert nun auch soweit. Habe dann das erwähnte Tool installiert und die Originaldatei mit der bearbeiteten verglichen. Und siehe da: Ein winziger Unterschied ist vorhanden!

Die Original-DBF-Datei:


Quelltext
1:
03 6F 06 15 02 00 00 00 81 02 6E 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 42 45 5A 43 48 4E 47 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 46 49 52 4D 41 00 00 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 41 4D 45 00 00 00 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 4F 52 4E 41 4D 45 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 42 54 45 49 4C 55 4E 47 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 53 54 52 41 53 53 45 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 4C 5A 00 00 00 00 00 00 00 00 43 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4F 52 54 00 00 00 00 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 4F 4D 4D 45 4E 54 00 00 00 00 43 00 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 45 4C 45 46 4F 4E 00 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 4F 42 49 4C 46 4F 4E 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 45 4C 45 46 41 58 00 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 52 41 4E 53 46 45 52 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 45 4E 55 54 5A 45 52 00 00 00 43 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 41 53 53 57 4F 52 54 00 00 00 43 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 52 41 4E 53 50 52 4F 54 00 00 43 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 4F 54 49 5A 45 4E 00 00 00 00 43 00 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 4D 41 49 4C 00 00 00 00 00 00 43 00 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 4F 4D 45 50 41 47 45 00 00 00 43 00 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 20 64 66 67 64 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 66 67 66 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 66 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1A                    


Und die bearbeitete Datei:


Quelltext
1:
03 6F 06 1A 02 00 00 00 81 02 6E 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 42 45 5A 43 48 4E 47 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 46 49 52 4D 41 00 00 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 41 4D 45 00 00 00 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 4F 52 4E 41 4D 45 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 42 54 45 49 4C 55 4E 47 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 53 54 52 41 53 53 45 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 4C 5A 00 00 00 00 00 00 00 00 43 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4F 52 54 00 00 00 00 00 00 00 00 43 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 4F 4D 4D 45 4E 54 00 00 00 00 43 00 00 00 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 45 4C 45 46 4F 4E 00 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4D 4F 42 49 4C 46 4F 4E 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 45 4C 45 46 41 58 00 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 52 41 4E 53 46 45 52 00 00 00 43 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 45 4E 55 54 5A 45 52 00 00 00 43 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 41 53 53 57 4F 52 54 00 00 00 43 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 52 41 4E 53 50 52 4F 54 00 00 43 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4E 4F 54 49 5A 45 4E 00 00 00 00 43 00 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 4D 41 49 4C 00 00 00 00 00 00 43 00 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 4F 4D 45 50 41 47 45 00 00 00 43 00 00 00 00 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 20 64 66 67 64 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 66 67 66 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 66 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 67 66 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1A                    


Unterschied findet sich in der ersten Zeile, vierter Block: 1A statt 15

Nun zum Abschluss noch der Vergleich der dazugehörenden MDX-Dateien ergibt:

"Die ausgewählten Dateien sind identisch."

So, nun die Frage: Kann das dieser süße kleine Unterschied sein ? =) Wenn ja, was mache ich nun ?


jaenicke - So 26.06.11 19:39

Das ist der Tag (1A, also der 26.) des letzten Zugriffs. Also nichts wirklich wichtiges. :nixweiss:

Zur Erklärung:
Das erste Byte gibt an, dass es eine DBase III+ Datei ist, danach kommen Jahr, Monat und Tag als jeweils ein Byte.

Einzige Erklärung, die mir einfällt:
Fritz speichert noch woanders das Datum und kommt nicht damit klar, dass es nicht übereinstimmt.


hussl1 - So 26.06.11 20:51

Hmm... habe aber nun festgestellt, dass beide Datein in Fritz funktionieren.
Vielleicht sind das dem Prgramm einfach zuviele Datensätze.
Wenn ich Fritz mit der veränderten Datenbank starte, so schnellt der RAM-Bedarf des Prozesses auf 1900Mb an und fällt dann auf 350Mb wo er sich stabilisiert. Dann wird die Fehlermeldung "Nicht genügend Speicher" angezeigt. Die CPU wird zu 25% belegt, bleibt nach der Fehlermeldung bei 0%.
Die von meinem Programm aktualisierte Datenbank hat 5907 Einträge. Habe aus Spaß einige txt-Dateien mit Daten importiert. Habe so eine Datenbank mit 7953 Einträgen gefüllt und es läuft. Werde mal weitere Datenbanken erstellen lassen und mit einigen Dingen spielen... Ich erstatte Bericht. Über weitere Anregungen würde ich mich freuen. =)


hussl1 - So 26.06.11 23:36

so ich glaube ich habe einen fehler gefunden!!!

ich meine dieser liegt in der MDX-Datei... (warum auch immer man die braucht).
Die Datei verändert sich beim Füllen... Wenn ich danach die Prozedur
zum Leeren der Datenbank früber laufen lasse, dann sind danach alle Einträge
verschwunden. Auch die Dateigröße passt (von 9,5Mb auf wenige Kb). Die mdx hat
dann allerdings immernoch etwa 1Mb. Das sollte doch nicht so sein, oder ?
Das würde erklären, warum mein Dateivergleich nichts gebracht hat.

Habe nun folgendes gemacht:

- Originaldatei erstellt (mit den 2 sinnlosen Einträgen)
- Mit dem Delphi-Prog geleert

Die DBF wird geleert, an der MDX ändert sich nichts!

Das kann doch nicht richtig sein oder ?


jaenicke - Mo 27.06.11 05:33

Schau mal, ob es eine Methode ReIndex oder so gibt. In dieser Datei ist nämlich der Index untergebracht.


hussl1 - Mo 27.06.11 20:33

Hey,

habe ich gemacht. Habe ausprobiert:


Delphi-Quelltext
1:
2:
3:
ReIndex();
Reindexall();
Reindexwithoutactivated();


bleibt aber ohne auswirkungen :(


hussl1 - So 03.07.11 15:43

Hallo zusammen,

habe nun nochmals etwas an dem Code geändert. Habe nun auf die Prozedur die das Adressbuch leeren soll verzichtet. Stattdessen kopiere ich einfach ein leeres Adressbuch.
Hier der Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
procedure TFritzAdressliste.FritzAdrDateiUeberschreiben;
var
  FritzDB : TVKDBFNTX;
  einstellungen: TEinstellungen;
  quelle, ziel: string;
begin
  // Leeren des vorhandenen Fritz-Adressbuches
  mFormular.Form1.Memo1.Lines.Add('Leere vorhandenes Fritz-Adressbuch.');

  //Lade Pfäde für DBF

  einstellungen := TEinstellungen.Create;

  ziel := einstellungen.GetPfad_fritz() + '\FritzAdr.dbf';
  quelle := einstellungen.GetPfad_home() + 'FritzAdr.dbf';

  // Kopiere DBF

  CopyFile(PChar(quelle),PChar(ziel),false);


  //Lade Pfäde für MDX

  einstellungen := TEinstellungen.Create;

  ziel := einstellungen.GetPfad_fritz() + '\FritzAdr.mdx';
  quelle := einstellungen.GetPfad_home() + 'FritzAdr.mdx';

  // Kopiere MDX

  CopyFile(PChar(quelle),PChar(ziel),false);


  {Version 1.0 - Fehler, Index-Datei wurde nicht angepasst// Dateipfad laden
  einstellungen := TEinstellungen.Create;
  // Objekt für Adressbuch anlegen
  FritzDB := VKDBFDataSet.TVKDBFNTX.Create(nil);
  FritzDB.DBFFileName := einstellungen.getPfad_fritz() + '\FritzAdr.dbf';
  // Einstellungen wieder freigeben
  einstellungen.destroy;
  FritzDB.AccessMode.OpenReadWrite := True;
  FritzDB.Active := True;
  while not FritzDB.Eof do
  begin
    FritzDB.Deleted := True;
    FritzDB.Next;
  end;
  FritzDB.Pack(False);
  // Index-Datei
  FritzDB.Reindex;
  FritzDB.ReindexAll;
  FritzDB.Pack(False);
  FritzDB.ReindexWithOutActivated;
  FritzDB.Refresh;
  FritzDB.Pack(False);
  //Objekt freigeben
  FritzDB.Free();  }


  mFormular.Form1.Memo1.Lines.Add('Leeren des vorhandenen Fritz-Adressbuchs beendet.')

end;


Das Problem mit der MDX scheint also gelöst. Fritz hängt sich aber denoch auf! Habe dann weiter probiert und folgendes festgestellt. Füge ich 121 Datensätze ein funktioniert alles ohne Probleme. Sind es 122 hängt sich alles auf... Ich kann danach aber im Fritz-Programm beliebig viele Datensätze hinzufügen.
Was kann das nun sein?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
procedure TFritzAdressliste.inFritzAdrSchreiben;
var
  i: integer;
  sqlstring, anzeigename, name, vorname, telefon, telefax: string;
  datensatz: TFritzAdresse;

begin


  // Fritz Adressbuch überschreiben

  FritzAdrDateiUeberschreiben();

  mFormular.Form1.Memo1.Lines.Add('Schreibe Daten in Fritz-Adressbuch... Dies kann etwas dauern.');

  // Zählen der vorzunehmenden Einträge
  i := 121;//Count;

  // Liste in Adressbuch schreiben

  While i-1>=0 do
    begin
      datensatz := TFritzAdresse(items[i-1]);
        anzeigename := datensatz.anzeigename;//'anzeige' + inttostr(i);//datensatz.anzeigename;
        name := datensatz.name;
        vorname := datensatz.vorname;
        telefon := datensatz.telefon;
        telefax := datensatz.telefax;
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;

      i := i-1;

    end;

    FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

  {// Zählen der vorzunehmenden Einträge
  i := Count;

  // Liste in Adressbuch schreiben

  While i-1>=0 do
    begin
      datensatz := TFritzAdresse(items[i-1]);
        anzeigename := datensatz.anzeigename;
        name := datensatz.name;
        vorname := datensatz.vorname;
        telefon := datensatz.telefon;
        telefax := datensatz.telefax;
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;

      i := i-1;

    end;

    FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;          }


      mFormular.Form1.Memo1.Lines.Add('Schreiben der Daten in Fritz-Adressbuch beendet.');

end;


Habe auch Haltepunkte gesetzt und geschaut ob es vllt am Datensatz liegt. Aber auch wenn ich alles überschreibe kommt der Fehler...

Wäre es vllt sinnvoller Fritz über SendKeys oder so zu steuern um dann eine mit meinem Programm erstellte CSV zu importieren?
Was sollte ich nun tun? Wie kann ich das Ganze weiter eingrenzen? Mir fehlt da die Erfahrung, weiß nicht wie ich weiter machen soll :(

Edit:

Wenn ich in den Anzeigename einen belibigen Wert vorgebe z.B.


Delphi-Quelltext
1:
anzeigename := test + inttostr(i);                    


so läuft das Programm bis 10 000 ohne Probleme...


Gruß

Matthias


hussl1 - Fr 07.10.11 11:45

Hallo zusammen nun läuft alles soweit...

Das Programm läuft wenn ich für das Feld Anzeigename folgende Werte vergebe(i ist die laufende Nummer der Datensätze):


Delphi-Quelltext
1:
anzeigename := inttostr(i) + datensatz.anzeigename;                    


Gebe ich aber zum Beispiel folgendes an:


Delphi-Quelltext
1:
anzeigename := datensatz.anzeigename + inttostr(i);                    

oder


Delphi-Quelltext
1:
anzeigename := 'A' + datensatz.anzeigename + inttostr(i);                    


hängt das Programm wieder wie bereits zuvor beschrieben.
Duplikate können da ja nicht das Problem sein, oder? Schließlich hat i immer einen anderen Wert und somit muss jeder Eintrag individuell sein, egal ob i vorne oder hinten steht. Weiß einer von euch Rat warum Fritz mit i am Anfang ohne Problem funktioniert und sonst nicht?
Bin für jeden Ansatz dankbar, ich probiere alles aus aber jetzt sind mir echt die Ideen ausgegangen in welche Richtung meine Versuche nun gehen sollen....

Danke für eure Hilfe

Hier nochmal der Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
procedure TFritzAdressliste.inFritzAdrSchreiben;
var
  i: integer;
  sqlstring, anzeigename, name, vorname, telefon, telefax: string;
  datensatz: TFritzAdresse;

begin


  // Fritz Adressbuch überschreiben

  FritzAdrDateiUeberschreiben();

  mFormular.Form1.Memo1.Lines.Add('Schreibe Daten in Fritz-Adressbuch... Dies kann etwas dauern.');

  // Zählen der vorzunehmenden Einträge
  i := Count;

  // Liste in Adressbuch schreiben

  While i-1>=0 do
    begin
      datensatz := TFritzAdresse(items[i-1]);
        anzeigename := inttostr(i) + ' ' + datensatz.anzeigename;//'anzeige' + inttostr(i);//datensatz.anzeigename;
        name := datensatz.name;
        vorname := datensatz.vorname;
        telefon := datensatz.telefon;
        telefax := datensatz.telefax;
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;

      i := i-1;

    end;

    FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

  {// Zählen der vorzunehmenden Einträge
  i := Count;

  // Liste in Adressbuch schreiben

  While i-1>=0 do
    begin
      datensatz := TFritzAdresse(items[i-1]);
        anzeigename := datensatz.anzeigename;
        name := datensatz.name;
        vorname := datensatz.vorname;
        telefon := datensatz.telefon;
        telefax := datensatz.telefax;
      sqlstring := 'INSERT INTO FritzAdr (BEZCHNG, NAME, VORNAME, TELEFON, TELEFAX, TRANSPROT)' +
      ' VALUES (''' +
      anzeigename +
      ''', ''' +
      name +
      ''', ''' +
      vorname +
      ''', ''' +
      telefon +
      ''', ''' +
      telefax +
      ''', ''A'');';

      // SQL-String in ADO löschen
      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;

      // SQL-String in ADO schreiben

      FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Add(sqlstring);

      // SQL-Abfrage Starten

      FritzAdrZugriff.DataModule2.ADOQuery1.ExecSQL;

      i := i-1;

    end;

    FritzAdrZugriff.DataModule2.ADOQuery1.SQL.Clear;          }


      mFormular.Form1.Memo1.Lines.Add('Schreiben der Daten in Fritz-Adressbuch beendet.');

end;


hussl1 - Mi 26.10.11 16:50

Hallo liebe Leute,

habe nun mit AVM gesprochen und denen mal mein Fehlerbild geschildert.
Die sagen mir folgendes:

ZITAT:

vielen Dank für Ihre Anfrage an den AVM-Support.

Dieses Problem kann dann auftreten, wenn der Pfad zur Datenbankdatei des FRITZ!adressbuchs (Standard-Datenbankdatei FRITZ!ADR.DBF) auf eine nicht vorhandene Datei bzw. ein nicht vorhandenes Verzeichnis verweist oder das betreffende Windows Benutzerkonto (Account) keine Zugriffsrechte für das Verzeichnis hat, in dem sich die Datei FRITZADR.DBF befindet.

Bitte gehen Sie zur Behebung des auf Ihrem System bestehenden Problems daher wie folgt vor:

1) Den Pfad zur Datenbankdatei des FRITZ!adressbuchs in der Windows Registry berichtigen:

- "Start / Ausführen" hier regedit eingeben,
- unter HKEY_CURRENT_USER/Software/AVM/FRITZ! 2.0/ Adr/ den Eintrag "Dateiname" markieren,
- rechten Mausklick, dann "Ändern" und unter "Wert" den absoluten Pfad zur gewünschten Datenbankdatei eintragen,
- Bestätigen mit "OK" und Registry schließen,
- Neustart des Computers.

2) Zugriffsberechtigungen für den Ordner, der die Datei FRITZADR.DBF enthält, überprüfen und ggf. den fraglichen Benutzer oder seine Benutzergruppe hinzufügen:

- Anmelden mit Administratoraccount und den Windows-Explorer öffnen,
- Ordner mit der Datei FRITZADR.DBF markieren > rechte Maustaste, dann auf "Eigenschaften / Freigabe",
- hier die Option "Diesen Ordner freigeben" wählen und über die Schaltflächen "Berechtigungen / Hinzufügen" den gewünschten Benutzer oder seine Benutzergruppe hinzufügen.

ZITAT ENDE

Die Hinweise zum Abarbeiten bringen mir nichts, vllt kann man aber Rückschlüsse darauf ziehen dass mein Code in dem Zusammenhang was verbockt. Was könnte das sein?

Über Anregungen würde ich mich sehr freuen.... -.-