Migration BDE-Paradox vert Access [Résolu]

plutonblanc 5 Messages postés dimanche 14 avril 2013Date d'inscription 1 août 2012 Dernière intervention - 26 juil. 2012 à 14:19 - Dernière réponse : cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention
- 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
Afficher la suite 

15 réponses

Répondre au sujet
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 30 juil. 2012 à 17:05
+3
Utile
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+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MAURICIO
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 31 juil. 2012 à 13:31
+3
Utile
La form n' est pas importante ...
TabProp est ta table paradox enfin!

A+


Composants Cindy pour Delphi
Faites une donation.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 27 juil. 2012 à 12:58
0
Utile
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
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 27 juil. 2012 à 13:26
0
Utile
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.
Commenter la réponse de cs_MAURICIO
plutonblanc 5 Messages postés dimanche 14 avril 2013Date d'inscription 1 août 2012 Dernière intervention - 27 juil. 2012 à 14:38
0
Utile
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.
Commenter la réponse de plutonblanc
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 27 juil. 2012 à 18:03
0
Utile
"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.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 31 juil. 2012 à 11:20
0
Utile
et pour les champs type Blob ?

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 31 juil. 2012 à 11:25
0
Utile
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.
Commenter la réponse de cs_MAURICIO
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 31 juil. 2012 à 11:35
0
Utile
en navigant la propriété

donc, on peut tester ?

cantador
Commenter la réponse de cs_cantador
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 31 juil. 2012 à 11:45
0
Utile
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.
Commenter la réponse de cs_MAURICIO
plutonblanc 5 Messages postés dimanche 14 avril 2013Date d'inscription 1 août 2012 Dernière intervention - 31 juil. 2012 à 12:04
0
Utile
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
Commenter la réponse de plutonblanc
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 31 juil. 2012 à 12:09
0
Utile
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.
Commenter la réponse de cs_MAURICIO
plutonblanc 5 Messages postés dimanche 14 avril 2013Date d'inscription 1 août 2012 Dernière intervention - 31 juil. 2012 à 13:27
0
Utile
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
Commenter la réponse de plutonblanc
plutonblanc 5 Messages postés dimanche 14 avril 2013Date d'inscription 1 août 2012 Dernière intervention - 1 août 2012 à 12:01
0
Utile
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
Commenter la réponse de plutonblanc
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 1 août 2012 à 12:14
0
Utile
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.
Commenter la réponse de cs_MAURICIO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.