Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Backup mdb (https://www.delphipraxis.net/167489-backup-mdb.html)

blondervolker 2. Apr 2012 09:57

Backup mdb
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
bekomme bald eine Kriese.Möchte von einer Access.mdb ein Backup erstellen.
Das geht so weit alles.Aber in der einen Tabelle kommt immer die dussliche Fehlermeldung:'Auch keine' ist kein gültiger Fließkommawert
für Feld'pa_Kosten'.
Ja ich bin der Blödi,dass weiss ich...:oops:

Hab das Beispiel mit drangehangen.Die 2 Datenbanken sind auch mit enthalten.(Sourcecode)+Abb1

mkinzler 2. Apr 2012 10:06

AW: Backup mdb
 
Warum kopierst du die Felder als Strings?

Delphi-Quellcode:
tblInsert.Fields[tblInsertRecord-1].AsString:=QryFrom.Fields[tblInsertRecord-1].AsString;
Besser

Delphi-Quellcode:
tblInsert.Fields[tblInsertRecord-1].Value:=QryFrom.Fields[tblInsertRecord-1].Value;

blondervolker 2. Apr 2012 10:07

AW: Backup mdb
 
Danke.Hab das so weit abgeändert.
Jetzt kommt die nächste Meldung:ungültiger Wert für'pa_Kosten'

Aber bin doch noch am lernen:-D

Perlsau 2. Apr 2012 15:13

AW: Backup mdb
 
Zitat:

Zitat von blondervolker (Beitrag 1159783)
Möchte von einer Access.mdb ein Backup erstellen. Das geht so weit alles.

Die Formulierung "geht soweit alles" ist im Rahmen einer Aussage über Programmcode als eher schwammig zu bezeichnen.

Zitat:

Zitat von blondervolker (Beitrag 1159783)
Aber in der einen Tabelle kommt immer die dussliche Fehlermeldung:'Auch keine' ist kein gültiger Fließkommawert für Feld'pa_Kosten'.

Offenbar versucht dein Programm, den Wert "Auch keine." aus dem ersten Datensatz im Feld pa_memo dem Feld pa_Kosten zuzuweisen. Wie das genau zustannde kommt, hat sich mir auch beim Debuggen deines Codes nicht erschlossen. Mir sind jedoch ein paar Sachen aufgefallen:

1. Du versuchst, einen mittels Autowert erzeugten Wert (Feld pa_ausgangsnr) zu überschreiben.
2. Statt
Delphi-Quellcode:
for tblInsertRecord:= 1 to tblInsert.Fields.Count do
        begin
          tblInsert.Fields[tblInsertRecord-1].AsString:=QryFrom.Fields[tblInsertRecord-1].AsString;
        end;
wäre besser:
Delphi-Quellcode:
for tblInsertRecord:= 0 to tblInsert.Fields.Count -1  do
        begin
          tblInsert.Fields[tblInsertRecord].AsString:=QryFrom.Fields[tblInsertRecord].AsString;
        end;
3. Statt
Delphi-Quellcode:
for QryFromRecord:=1 to QryFrom.RecordCount do
wäre hier besser:
Delphi-Quellcode:
WHILE NOT QryFrom.EOF DO
weil du ja sowieso mit QryFrom.Next zum nächsten Datensatz weiterschaltest. Ist der letzte Datensatz erreicht, wird die Schleife noch einmal ausgeführt. Beim nächsten NEXT erreicht der Datensatzzeiger das EOF und die WHILE-Bedingung wird TRUE.

Übersichtlicher Code hilft beim Debuggen ungemein!

Wenn du eine Sicherheitskopie der gesamten Access-Datei anlegen möchtest, bietet sich die Alternative an, die gesamte Datei einfach unter einem anderen Namen zu kopieren. Ich mache das bei etlichen meiner frühen Kundendatenbanken und biete sogar dem Anwender die Möglichkeit, beim Beginn bzw. beim Beenden der Anwendung eine Sicherung anzulegen. Auch zwischendurch soll der Anwender die Möglichkeit haben, schnell mal ein Backup erzeugen zu können.

Nicht vergessen, vor dem Kopieren alle Connections zu schließen und danach wieder zu öffnen.

Bummi 2. Apr 2012 22:52

AW: Backup mdb
 
ich schließe mich Perlsau an, bei der Gelegenheit böte sich ein Kompress/Repair mit an
Delphi-Quellcode:
procedure CompressRepairMDB(DBFile : TFileName; APassword : String);
const
  tmpDBName = 'compress.mdb';
var
  JROJetEngine : TJetEngine;
  srcConn,
  destConn : String;
begin
  JROJetEngine := TJetEngine.Create(nil);
  try
    srcConn := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DBFile;
    destConn := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + sPath + tmpDBName;

    if APassWord <> '' then begin
      srcConn := srcConn + ';Jet OLEDB:Database Password="' + APassWord+ '"';
      destConn := destConn + ';Jet OLEDB:Database Password="' + APassWord+ '"';
    end;

    // Datenbank reparieren & komprimieren
    JROJetEngine.CompactDatabase(srcConn, destConn);

    if FileExists(sPath + tmpDBName) then
      begin
      // Ausgangsdatenbank löschen oder auch nicht (gegf. umbenennen)
      DeleteFile(PChar(DBFile));
      // Komprimierte DB anstelle der AusgangsDB kopieren
      CopyFile(PChar(sPath + tmpDBName), PChar(DBFile), false);
      // Komprimierte DB löschen oder als Backup aufbewaren
      DeleteFile(PChar(sPath + tmpDBName));
    end;
  finally
    JROJetEngine.Disconnect;
    JROJetEngine.Free;
  end;
end;
mit Typbibliothek Microsoft Jet and Replication Objects 2.x

blondervolker 3. Apr 2012 12:11

AW: Backup mdb
 
Erstmal Dankeschön!!!

Hab es einfacher gelöst.

Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);
var
  fileSource, fileDest: string;
begin
  fileSource := 'postbuch.mdb';
  fileDest := 'Backup\backup_postbuch.mdb';
  CopyFile(PChar(fileSource), PChar(fileDest), False);
end;

//Geht perfekt Volker
Und es erfüllt den selben Zweck:-D

Perlsau 3. Apr 2012 12:20

AW: Backup mdb
 
Zitat:

Zitat von blondervolker (Beitrag 1159935)
Erstmal Dankeschön!!! Hab es einfacher gelöst.
Delphi-Quellcode:
CopyFile(PChar(fileSource), PChar(fileDest), False);
Und es erfüllt den selben Zweck:-D

Eben. Bevor du dich in unnötigen Komplexitäten verstrickst und am Ende noch Datenverluste hinnehmen mußt :-D

Was an deiner Procedure noch fehlt, sind Disconnect vor dem Kopieren und anschließender Connect. Oder ist deine Anwendung nicht ständig mit deiner Access-Datenbank verbunden?

mkinzler 3. Apr 2012 12:24

AW: Backup mdb
 
Nur das du etwaige Fehler einfach mitkopierst.

blondervolker 3. Apr 2012 13:48

AW: Backup mdb
 
Nee,ich habe mehre Formen.Beim schließen des Programm's wird
noch eine angezeigt und dort habe ich alles reingepackt(DB schließen usw.).

Perlsau 3. Apr 2012 14:00

AW: Backup mdb
 
Zitat:

Zitat von blondervolker (Beitrag 1159956)
Nee,ich habe mehre Formen.Beim schließen des Programm's wird
noch eine angezeigt und dort habe ich alles reingepackt(DB schließen usw.).

Sicher. Aber in deiner Procedure, die du oben anzeigst, löst du doch mit einem Button den Kopiervorgang aus. Dort ist aber nichts zu erkennen, was auf einen Disconnect vor dem Kopieren hinweist. Wenn du eine verbundene Datenbank zu kopieren versuchst, kann es zu unerwarteten Problemen kommen.

Iwo Asnet 3. Apr 2012 14:54

AW: Backup mdb
 
Zitat:

Zitat von mkinzler (Beitrag 1159941)
Nur das du etwaige Fehler einfach mitkopierst.

Schließlich will er kopieren und nicht reparieren. :lol:
Kennst Du einen Photokopierer, der ein Bild von ...Merkel... repariert?

Perlsau 3. Apr 2012 15:23

AW: Backup mdb
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1159973)
Kennst Du einen Photokopierer, der ein Bild von ...Merkel... repariert?

Merkelbilder lassen sich nicht reparieren, weil bereits das Original defekt ist.:?

Sir Rufo 3. Apr 2012 19:28

AW: Backup mdb
 
@blondervolker

Erklär mir doch mal bitte, warum dieser Beitrag in die Code-Library soll?

blondervolker 3. Apr 2012 22:43

AW: Backup mdb
 
Warum?:-D

mkinzler 3. Apr 2012 22:47

AW: Backup mdb
 
Zitat:

Zitat von Sir Rufo (Beitrag 1160016)
@blondervolker

Erklär mir doch mal bitte, warum dieser Beitrag in die Code-Library soll?

Das würde mich auch mal interessieren.

DP-Maintenance 3. Apr 2012 22:48

Dieses Thema wurde am "03. Apr 2012, 22:48 Uhr" von "mkinzler" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "Datenbanken" verschoben.

BUG 3. Apr 2012 22:51

AW: Backup mdb
 
Zitat:

Zitat von blondervolker (Beitrag 1160047)
Warum?:-D

Weil du ihn in Neuen Beitrag zur Code-Library hinzufügen verfasst hast.
Wieso hast du das gemacht bzw. was hast du gemacht um den Betrag zu erstellen. Wenn du dich erinnerst, was genau du gemacht hast, könnte man diesem Problem eventuell mal beseitigen.

Sir Rufo 3. Apr 2012 22:52

AW: Backup mdb
 
Zitat:

Zitat von mkinzler (Beitrag 1160048)
Zitat:

Zitat von Sir Rufo (Beitrag 1160016)
@blondervolker

Erklär mir doch mal bitte, warum dieser Beitrag in die Code-Library soll?

Das würde mich auch mal interessieren.

Ist ja nicht der erste Beitrag, der von genau dieser Rubrik verschoben werden musste :roll:

Zitat:

Zitat von blondervolker (Beitrag 1160047)
Warum?:-D

Meine Vermutung: Weil lesen ohne verstehen nicht reicht?

EDIT:

http://www.delphipraxis.net/dp_searc...&starteronly=1

mkinzler 3. Apr 2012 22:59

AW: Backup mdb
 
Im neuem Forum dürfte diese Unterforum eigentlich nicht ausversehen gewählt werden; im alten war dieser Eintrag ja standardmässig ausgewählt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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