Migration BDE-Paradox vert Access

Résolu
plutonblanc Messages postés 5 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 1 août 2012 - 26 juil. 2012 à 14:19
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 1 août 2012 à 12:14
Bonjour,
Il y a pas mal d'années, j'ai créé une base de données (Delphi BDE - Paradox) avec plusieurs tables et des centaines de champs. Je voudrais aujourd'hui migrer cette base vers Acces (avec ADO). Quel le meilleur moyen de récupérer la structure de ma table ? Est-il possible d'utiliser l'instruction LIKE dans une requête ? merci de ton aide

15 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
30 juil. 2012 à 17:05
Salut PlutonBlanc,

voila, tu peux télécharger la version 5.06 de mes compos afin d' utiliser le TcyDBXImportDataset:

Composants Cindy pour Delphi
Faites une donation.

Comme je n' ai pas encore fait de démo, voici le code à utiliser :

uses BDE;

cyDbxImportDataset1.Dataset := TaTableParadox;
cyDbxImportDataset1.TableName := EditExportToDbxTableName.Text;
cyDbxImportDataset1.PrimaryKey := 'Id' + EditExportToDbxTableName.Text;

// Informer la taille des champs pour les Integers/floats (impossible de svoir via le TDataset):
try
TabProp := TFrmBDEDataset(FrmPrin.ActiveMDIChild).TbFile;
pFlds := AllocMem((TabProp.FieldCount + 1) * sizeof(FLDDesc));
FillChar(pFlds^, (TabProp.FieldCount + 1) * sizeof(FLDDesc), 0);
Check(DbiGetFieldDescs(TabProp.handle, pFlds));

for f := 0 to TabProp.FieldCount-1 do
begin
FieldIndex := cyDbxImportDataset1.Fields.FindFieldIndex(TabProp.Fields[f].FieldName);

if f <> 0 then
Inc(pFlds, 1);

{ Case pFlds^.iFldType Of
1: StringGridProps.Cells[2, StringGridProps.RowCount-1] := 'String';
2: StringGridProps.Cells[2, StringGridProps.RowCount-1] := 'Date';
3: StringGridProps.Cells[2, StringGridProps.RowCount-1] := 'Memo';
4: StringGridProps.Cells[2, StringGridProps.RowCount-1] := 'Bool';
5: StringGridProps.Cells[2, StringGridProps.RowCount-1] := 'Integer';
6: StringGridProps.Cells[2, StringGridProps.RowCount-1] := '???';
7: StringGridProps.Cells[2, StringGridProps.RowCount-1] := 'Float';
Else
StringGridProps.Cells[2, StringGridProps.RowCount-1] := 'Ché pas';
End; }

if pFlds^.iFldType in [1, 5, 7] then
cyDbxImportDataset1.Fields[FieldIndex].FieldType.Size := pFlds^.iUnits1;

if pFlds^.iFldType = 7 then // Floats
begin
cyDbxImportDataset1.Fields[FieldIndex].FieldType.Precision := pFlds^.iUnits2;

// Convertir Float fields sans décimaux vers un Integer:
if cyDbxImportDataset1.Fields[FieldIndex].FieldType.Precision = 0 then
cyDbxImportDataset1.Fields[FieldIndex].FieldType.DataType := ftInteger;
end;
end;
finally
pFlds := Nil;
FreeMem(pFlds);
end;

// Creer la table :
cyDbxImportDataset1.CreateTable;

// Exporter enregistrements :
if CBExportRecords.Checked then
begin
Screen.Cursor := crHourGlass;
cyDbxImportDataset1.Dataset.DisableControls;
cyDbxImportDataset1.ImportRecords;
cyDbxImportDataset1.Dataset.EnableControls;
Screen.Cursor := crDefault;
end;

A+
3
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
31 juil. 2012 à 13:31
La form n' est pas importante ...
TabProp est ta table paradox enfin!

A+


Composants Cindy pour Delphi
Faites une donation.
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
27 juil. 2012 à 12:58
Bonjour,

Oui, c'est possible mais il te faut un outil
comme EMSImportFor, sinon gare aux soucis (pertes d'informations..)
et il te faudra établir une connexion ODBC.

cantador
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
27 juil. 2012 à 13:26
Salut,

je suis en train de créer mon propre compo qui permettra d' exporter n' importe quel TDataset (table DBase, Paradox etc .. ou informer les propriétés Fields directement) vers une table SQL (on pourra aussi récupérer le code SQL généré). Il inclus la fonctionnalité d' exportation des données.
Ce compo fera partie de la prochaine version de mes compos Cindy sachant que le code SQL pourrait varier légèrement entre MySQL et Access car le code SQL généré est pour une base de données MySQL.

Cette belle chose est prévue pour bientôt.

A+


Composants Cindy pour Delphi
Faites une donation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
plutonblanc Messages postés 5 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 1 août 2012
27 juil. 2012 à 14:38
Merci à Cantador et Mauricio.
Cantador : je vais me renseigner pour EMSImportFor...
Mauricio : pour "cette belle chose", vivement que "bientôt" arrive !
Une précision : ce que je veux récupérer prioritairement, c'est les caractéristiques de chaque champ (nom, type, dimension). Pour le reste en effet, je saurai récupérer les données.
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
27 juil. 2012 à 18:03
"Une précision : ce que je veux récupérer prioritairement, c'est les caractéristiques de chaque champ"
- C' est ce que fait le compo ^^

Bientôt := Début de semaine prochaine!

A+


Composants Cindy pour Delphi
Faites une donation.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
31 juil. 2012 à 11:20
et pour les champs type Blob ?

cantador
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
31 juil. 2012 à 11:25
Salut Cantador,

le compo se charge d' "exporter" les champs de type Memo vers le type MEDIUMTEXT.
Les champs de type Blob (image) sont exportés comme MEDIUMBLOB.
Note que l' on peut modifier le type détecté avant l' exportation en navigant la propriété TcyDBXImportDataset.Fields[].DataType.

A+


Composants Cindy pour Delphi
Faites une donation.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
31 juil. 2012 à 11:35
en navigant la propriété

donc, on peut tester ?

cantador
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
31 juil. 2012 à 11:45
Tout à fait,

tu peux consulter/modifier les champs qui vont être exportés.
Tu peux aussi voir le code SQL qui va être généré en appelant GetCreateTableSQL; au lieu de créer la table.

petit bout de code du compo:

function IncludeField(aField: TField): Boolean;
procedure GenerateFieldsFromDataset(ClearCurrentFields: Boolean);
function GetCreateTableSQL: String;
procedure CreateTable;
function GetAlterTableSQL: String;
procedure AterTable;
procedure ImportRecords;
published
property Dataset: TDataset read FDataset write SetDataset;
property Fields: TcyDBXFields read FFields write SetFields;
property FieldsOptions: TImportFieldsOptions read FFieldsOptions write SetFieldsOptions default [ifData];
property PrimaryKey: String read FPrimaryKey write SetPrimaryKey;
property TableName: String read FTableName write FTableName;
property Engine: String read FEngine write FEngine;
property Charset: String read FCharset write FCharset;
property SQLConnection: TSQLConnection read FSQLConnection write SetSQLConnection;
end;

A+


Composants Cindy pour Delphi
Faites une donation.
0
plutonblanc Messages postés 5 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 1 août 2012
31 juil. 2012 à 12:04
Bonjour Mauricio
Tu avais dit "début de semaine"... C'est ce qu'on appelle de la fiabilité.
Si ce n'est pas abuser de ta disponibilité, pourrais-tu me donner des précisions sur les formes que je dois créer (comme
"FrmBDEDataset"), sur les composants à installer (comme "EditExportToDbxTableName" - un composant tedit - ou "CBExportRecords" -?-) et sur les variable à déclarer (de quels types sont "TabProp ", "pFlds "... ?).
Si tu n'as pas le temps et je le comprendrai, j'attendrai le demo...
Je te remercie sincèrement
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
31 juil. 2012 à 12:09
C' est de ma faute, en voulant limiter le code, j' en ai oublié les variables :

f, FieldIndex: Integer;
pFlds: pFLDDesc; // Mettre BDE dans les uses!
TabProp: TTable;

EditExportToDbxTableName est un Tedit qui permet à l' utilisateur de saisir le nom de la table à créer.
CBExportRecords est un CheckBox qui permet de savoir si l' utilisateur veut aussi exporter les enregistrements

A+



Composants Cindy pour Delphi
Faites une donation.
0
plutonblanc Messages postés 5 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 1 août 2012
31 juil. 2012 à 13:27
Une ligne de code me pose encore problème.
"TabProp := TFrmBDEDataset(FrmPrin.ActiveMDIChild).TbFile;"
"Frmprin" est sans doute une forme qui a des enfants MDI ? et dans ce cas, qu'est-ce que "TBfile" ?
Merci
0
plutonblanc Messages postés 5 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 1 août 2012
1 août 2012 à 12:01
Mes excuses pour ce temps de silence radio.
Je voulais te dire que grâce à toi, j'ai récupéré toutes mes tables.
Un grand merci
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
1 août 2012 à 12:14
Content d' avoir pu t' aider, tu as la possibilité de faire une donation

Une question: étant donné qu' à la base, le compo fut crée par rapport à mysql, as tu pu utiliser le code sql généré sans modifications?

A+

Composants Cindy pour Delphi
Faites une donation.
0
Rejoignez-nous