AccessDB reparieren

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

AccessDB reparieren

Beitragvon af99 » 27. Feb 2015, 14:43 AccessDB reparieren

Hallo Zusammen,

ich bin neu hier und möchte mich kurz Vorstellen.

Mein Name ist Andreas. Ich programmiere sonst mit Delphi (im Moment in der Version XE5 Ultimate).

Wir arbeiten hier mit talend (ist ein Java Codegenerator). Dieser läuft auf einer Ubuntu Kiste. Mit talend fülle ich eine AccessDB dabei werden jedoch die Indizes nicht korrekt erstellt und diese sind nach der Befüllung korrupt. Nach einen Repair der Accessdatenbank sind diese wieder konsistent. Dieses Repair kann ich aber nicht mit talend durchführen.

Daher ist mir die Idee gekommen mit Lazarus ein Linux Programm zu schreiben das dieses Repair nachträglich macht. In Delphi unter Windows ist das auch kein Problem. Wenn ich das Programm jedoch unter Lazarus kompilieren möchte (erst einmal unter Windows) bekomme ich einen Fehler
Hier das Programm
Code: Alles auswählen
unit main;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ComObj;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
function CompactAndRepair(DB: string): Boolean; {DB = Path to Access Database}
var
   v: OLEvariant;
begin
   Result := True;
   try
     v := CreateOLEObject('JRO.JetEngine');
     try
       V.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB,
                         'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+'x;Jet OLEDB:Engine Type=5');
       DeleteFile(DB);
       RenameFile(DB+'x',DB);
     finally
       V := Unassigned;
     end;
   except
     Result := False;
   end;
end;
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  CompactAndRepair('C:\Lazarus_Programme\outMMCD_2668.mdb');
end;
 
end.
 

und der Fehler (siehe Anhang)
Dieser kommt an dieser Stelle
Code: Alles auswählen
 V.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB,
                         'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+'x;Jet OLEDB:Engine Type=5');       

Kann einer helfen ???

Gruß
Andreas
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
af99
 
Beiträge: 3
Registriert: 27. Feb 2015, 14:29

Beitragvon theo » 27. Feb 2015, 15:09 Re: AccessDB reparieren

Ich habe von der Sache überhaupt keine Ahnung, aber es könnte an dem String Typen liegen.
Probier mal mit WideString

function CompactAndRepair(DB: WideString)......

und

CompactAndRepair(UTF8Decode('C:\Lazarus_Programme\outMMCD_2668.mdb'));

Nur eine Vermutung...
theo
 
Beiträge: 8042
Registriert: 11. Sep 2006, 18:01

Beitragvon wp_xyz » 27. Feb 2015, 16:04 Re: AccessDB reparieren

JRO ist von Microsoft. Ich würde mich wundern, wenn es das auch für Linux gibt.
wp_xyz
 
Beiträge: 2480
Registriert: 8. Apr 2011, 08:01

Beitragvon theo » 27. Feb 2015, 16:26 Re: AccessDB reparieren

wp_xyz hat geschrieben:JRO ist von Microsoft. Ich würde mich wundern, wenn es das auch für Linux gibt.


Ja klar, das sowieso. Aber auf Windows müsste es doch laufen.
theo
 
Beiträge: 8042
Registriert: 11. Sep 2006, 18:01

Beitragvon shokwave » 27. Feb 2015, 18:31 Re: AccessDB reparieren

Theo ist auf der richtigen Spur. Bei mir klappt es, wenn man die Parameter als Widestringvariablen übergibt.
Code: Alles auswählen
function CompactAndRepair(DB: string): Boolean; {DB = Path to Access Database}
var
   v: OLEvariant;
   ws, ws2:widestring;
begin
   Result := True;
   try
     v := CreateOLEObject('JRO.JetEngine');
     try
       ws:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB;
       ws2:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DB+'x;Jet OLEDB:Engine Type=5';
       V.CompactDatabase(ws, ws2);
       DeleteFile(DB);
       RenameFile(DB+'x',DB);
     finally
       V := Unassigned;
     end;
   except
     Result := False;
   end;
end;
 
mfg Ingo
shokwave
 
Beiträge: 413
Registriert: 15. Nov 2007, 16:58
Wohnort: Rudolstadt
OS, Lazarus, FPC: Win10 (L 1.6 FPC 3.0.0) | 
CPU-Target: i386,x64
Nach oben

Beitragvon gocher » 28. Feb 2015, 16:44 Re: AccessDB reparieren

ein bisschen sauberer und ohne Variant geht es auch:
http://www.gocher.me/compactAccessMDB
MfG Gocher
akt. Projekt: Webserver mit integrierten CMS in Free Pascal - www.gocher.me
gocher
 
Beiträge: 295
Registriert: 23. Nov 2010, 23:41
Wohnort: Geldern
OS, Lazarus, FPC: Win/Linux, Lazarus SVN, FPC SVN | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon af99 » 2. Mär 2015, 15:30 Re: AccessDB reparieren

ok, super unter Windows geht es nun.
Hat einer eine Idee wie ich das unter Linux realisieren kann ?
af99
 
Beiträge: 3
Registriert: 27. Feb 2015, 14:29

Beitragvon theo » 2. Mär 2015, 15:55 Re: AccessDB reparieren

Du benutzt ja hier einfach Windows Tools, die es so unter Linux nicht gibt.
Vielleicht kannst du unter Wine was schrauben, aber willst du nicht lieber ein DB System nehmen, welches du nicht "reparieren" musst, und welches auch unter Linux vernünftig unterstützt wird?
theo
 
Beiträge: 8042
Registriert: 11. Sep 2006, 18:01

Beitragvon wp_xyz » 2. Mär 2015, 15:59 Re: AccessDB reparieren

Hier steht wie du MDAC (dazu gehört soviel ich weiß auch JRO) für Wine installierst: http://www.ehow.com/how_8759443_install-mdac-linux.html. falls das gelingt, könntest du das Windows-Programm unter Wine laufen lassen.
wp_xyz
 
Beiträge: 2480
Registriert: 8. Apr 2011, 08:01

Beitragvon af99 » 3. Mär 2015, 08:15 Re: AccessDB reparieren

Hallo Theo und wp_xyz,

ja ich würde gerne eine vernümftige DB nehmen kann ich aber leider nicht da die WWS unserer Kunden (und das sind viele) dieses Format zum Import benötigen. Es ist auch ärgerlich das talend die DB nicht ohne Fehler befüllen kann...aber wie schon gesagt ich habe keine Wahl...leider.

Ich schau mir dann mal Wine an. Vielleicht geht damit was.

Danke schon mal
af99
 
Beiträge: 3
Registriert: 27. Feb 2015, 14:29

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried