bonsoir ,
je suis entrain de réalisé un petit utilitaire qui copie une base vers une autre.
on utilisant les composants IBX du delphi 7
base de donnée Interbase 7.5
voici les propriétés du composant IBDatabase1 qui pointe vers la base source .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Name : Source default Transaction : IBTransactionSource
les propriétés du composant IBTransactionSource sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DefaultAction : TACommit DefaultDatabase : Source Params : read_committed rec_version nowait
voici les propriétés du composant IBDatabase2 qui pointe vers la base Destination
les propriétés du composant IBTransactionDestination sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Name : Destination default Transaction : IBTransactionDestination
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DefaultAction : TACommit DefaultDatabase : Destination Params : read_committed rec_version nowait
je tente de copie les données table par table c'est pour ça j'utilise deux composants IBTable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 IBTable1 (de la source) Name : AncienTable : DataBase : Source Transaction : IBTransactionSource
cette nouvelle table a son propre transaction qui est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3IBTable2 (de la Destinatio Name : NouvelleTable : DataBase : Destination
Transaction : IBTransaction2
les propriétés du composant IBTransaction2 sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DefaultAction : TACommit DefaultDatabase : Source Params : read_committed rec_version nowait
pour la copie j'utilise ce bout de code :
mais tellement il y a des tables qui contiennent plus de 180000 enregistrements j'ai message d'erreur qui est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 //1- Ouvrir la base source Source.Close; Source.Open; //4- Ouvrir la nouvelle base Destination.Close; Destination.Open ; if not IBTransactionDestination.InTransaction then IBTransactionDestination.StartTransaction ; Source.GetTableNames(ListdesTable.Items); // pour a voir la liste des tables NumeroTable := 0 ; while NumeroTable <= ListdesTable.Count - 1 do begin AncienTable.Close ; NouvelleTable.Close ; AncienTable.TableName := ListdesTable.Items[NumeroTable] ; if not IBTransaction2.InTransaction then IBTransaction2.StartTransaction ; AncienTable.Open ; if AncienTable.IsEmpty = False then begin NouvelleTable.TableName := ListdesTable.Items[NumeroTable] ; NouvelleTable.Open ; NbColonne := AncienTable.FieldCount ; While not AncienTable.Eof do begin NouvelleTable.Insert ; for MonIndice := 0 to NbColonne -1 do begin NouvelleTable.Fields[MonIndice].AsString := AncienTable.Fields[MonIndice].AsString ; end; NouvelleTable.Post ; AncienTable.Next ; end; IBTransaction2.Commit ; end; NumeroTable := NumeroTable + 1 end;
mémoire insuffisante.
je sais très bien qu'il y a une mauvaise manipulation des transactions mais je ne sais pas ou?
Partager