AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Export von BDE-Paradox Datenbanken

Export von BDE-Paradox Datenbanken

Ein Thema von OrgFreak · begonnen am 2. Dez 2012 · letzter Beitrag vom 2. Dez 2012
Antwort Antwort
OrgFreak

Registriert seit: 1. Sep 2011
60 Beiträge
 
Turbo Delphi für Win32
 
#1

Export von BDE-Paradox Datenbanken

  Alt 2. Dez 2012, 01:51
Datenbank: Paradox • Version: 5-7 • Zugriff über: BDE
Guten Abend zusammen

Hab ein Problem mit dem Export einer Paradox-Datenbank, welche mit Grafikfeldern bestückt ist.
Beim Export mit "normalen" Feldern, hatte ich bisher keine Probleme ohne Datenverlust. Aber wenn ich die Paradox-Datei exportiere, verliere ich immer die Grafikfelder.
Ich kann die Paradox-Datei nach DBase ohne Probleme exportieren. Aber wenn ich mit Access oder Filemaker importieren möchte, dann melden sich Fehler.
Access kann die Paradox-Datei nicht lesen.
Kann mir jemand verraten, wie man die Grafik-Felder (Blob) von Paradox
exportieren kann, ohne Verluste ?

Für Eure hoffentlich hilfreichen Antworten danke ich im voraus.

Gruss

OrgFreak
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.535 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Export von BDE-Paradox Datenbanken

  Alt 2. Dez 2012, 02:18
Wie/Womit exportierst du?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Export von BDE-Paradox Datenbanken

  Alt 2. Dez 2012, 08:38
Vielleicht kannst Du Dir folgendes anpassen für Deine Bedürfnisse.
Quelle war Paradox, Ziel SQLServer.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBTables, ADODB, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    DB: TDatabase;
    Memo1: TMemo;
    AC: TADOConnection;
    Panel1: TPanel;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    ProgressBar1: TProgressBar;
    Button2: TButton;
    Connection: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FBreak:Boolean;
    FTablesList:TStringList;
    procedure CreateTable(const tn: String);

    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


Function GetFieldCreaString(const s:String;Size:Integer;Const CName:String;PrimaryKey:String=''):String;
begin
Result:='['+s+'] ';
if CName='TAutoIncFieldthen Result:=Result+'int'
else if CName='TBCDFieldthen Result:=Result+'money'
else if CName='TBlobFieldthen Result:=Result+'varbinary(max)'
else if CName='TBooleanFieldthen Result:=Result+'Bit'
else if CName='TBytesFieldthen Result:=Result+'varbinary(max)'
else if CName='TCurrencyFieldthen Result:=Result+'money'
else if CName='TDateFieldthen Result:=Result+'DateTime'
else if CName='TDateTimeFieldthen Result:=Result+'DateTime'
else if CName='TDatethen Result:=Result+'DateTime'
else if CName='TTimeFieldthen Result:=Result+'DateTime'
else if CName='TFloatFieldthen Result:=Result+'float'
else if CName='TGraphicFieldthen Result:=Result+'image'
else if CName='TGuidFieldthen Result:=Result+'uniqueIdentifier'
else if CName='TIDispatchFieldthen Result:=Result+'varbinary(max)'
else if CName='TIntegerFieldthen Result:=Result+'int'
else if CName='TLargeIntFieldthen Result:=Result+'int'
else if CName='TMemoFieldthen Result:=Result+'varchar(max)'
else if CName='TSmallintFieldthen Result:=Result+'smallint'
else if CName='TStringFieldthen Result:=Result+'Varchar ('+IntToStr(Size)+')'
else if CName='TWideStringFieldthen Result:=Result+'Varchar ('+IntToStr(Size)+')'
else if CName='TVarBytesFieldthen Result:=Result+'varbinary(max)'
else if CName='TWordFieldthen Result:=Result+'Byte'
else Showmessage(Cname);
if Pos('['+Uppercase(s)+']',Uppercase(PrimaryKey))>0 then Result:=Result+' NOT NULL'
else Result:=Result+' NULL';
end;

Function Get1310Komma(i:Integer):String;
begin
if i=0 then Result:='else Result:=','#13#10;
end;

Function GenTableDupSQL(ADS:TTable;TableName:String;PrimaryKey:String=''):String;
var
sl:TStringList;
i:Integer;
begin
Ads.Open;
sl:=TStringList.Create;
Ads.GetFieldNames(sl);
Result:='CREATE TABLE ['+TableName+'] (';
For i:=0 to sl.Count-1 do
    begin
    Result:=Result+Get1310Komma(i)+GetFieldCreaString(sl[i],Ads.FieldbyName(sl[i]).Size,Ads.FieldbyName(sl[i]).Classname,PrimaryKey);
    end;
Result:=Result+')';
sl.Free;
end;




procedure TForm1.CreateTable(const tn:String);
var
  t:TTable;
  z:TAdodataset;
  SQL:String;
  i,j:Integer;
begin
    t:=TTable.Create(self);
    z:=TAdodataset.Create(self);
    z.Connection := AC;
    try
      t.DatabaseName := DB.DatabaseName;
      t.TableName := tn + '.db';
      Session.AddPassword('WasAuchImmerWennBenötigt');
      t.Open;
      ProgressBar1.Position := 0;
      ProgressBar1.Max := t.RecordCount;
      SQL := GenTableDupSQL(t,tn);
      AC.Execute(SQL);
      z.CommandText := 'Select * from ' + tn;
      z.Open;
      j :=0;
      Memo1.Lines.Add(FormatDateTime('hh:nn:ss > ',now) + 'Importiere: ' + tn + ' (' + IntToStr(t.recordCount) + ')');
      While (not t.EOF) and (Not FBreak) do
          begin
            Application.ProcessMessages;
            inc(j);
            z.Append;
            for i:=0 to z.Fieldcount-1 do
                begin
                try
                z.Fields[i].Assign(t.FieldByName(z.Fields[i].FieldName));
                except
                        ON E:Exception do Memo1.Lines.Add('Feldfehler Satz ' +IntToStr(j)+ ': ' + z.Fields[i].FieldName );
                end;
                end;
            try
            z.Post;
                except

                        ON E:Exception do
                          begin
                          Memo1.Lines.Add('POSTFEHLER ' + E.Message );
                          z.Cancel;
                          end;
                end;

            ProgressBar1.Position := ProgressBar1.Position + 1;
            t.Next;
          end;
    finally
    t.Free;
    z.Free;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  C_Abgeschlossen='Import abgeschlossen.';
var
  i:Integer;

begin
// AC.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=' + Edit2.Text;
// AC.Connected := true;
  DB.Connected := false;
  DB.Aliasname := Edit1.Text;
  DB.DatabaseName := Edit1.Text;
  DB.Connected := true;
  
  AC.Execute('Create Database ' + Edit2.Text);
  AC.Execute('USE ' + Edit2.Text);

  DB.GetTableNames(FTablesList);
  for i := 0 to FTablesList.Count - 1 do
    begin
        try
        CreateTable(FTablesList[i] );
        except
        ON E:Exception do Memo1.Lines.Add(StringOfChar('_',50) + #13#10 + E.Message + #13#10 + StringOfChar('_',50) + #13#10 );
        end;
    end;
  Memo1.Lines.Add(C_Abgeschlossen);
  Messagedlg(C_Abgeschlossen,mtInformation,[mbok],0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FTablesList:=TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FTablesList.Free;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Button1.Enabled := (Length(Trim(Edit1.Text)) > 0) and (Length(Trim(Edit2.Text)) > 0) and AC.Connected;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  AC.Connected := false;
  AC.ConnectionString := PromptDataSource(0, AC.ConnectionString);
  AC.Properties.Item['Initial Catalog'].Value := 'master';
  Connection.Caption := AC.ConnectionString;
  AC.Connected := true;
  Edit1Change(nil);
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
OrgFreak

Registriert seit: 1. Sep 2011
60 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Export von BDE-Paradox Datenbanken

  Alt 2. Dez 2012, 18:56
Guten Tag

Danke für die Antwort.
Aber ich hab kein Quellcode geschrieben für den Export. Ich hab ein Programm genommen,
mit dem man konvertieren kann. Es ist ein Freeware-Programm und heisst Exportizer.
Man kann nach Dbase III, IV, V, Excel, RTF und HTML exportieren.
Danke für das Codebeispiel, aber sieht noch ziemlich kompliziert aus.

Gruss

OrgFreak
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf