IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Remplir une base de données Sqlite3 à partir d'un fichier texte problème de lenteur ?


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut Remplir une base de données Sqlite3 à partir d'un fichier texte problème de lenteur ?
    Bonjour !!
    je viens d'ajouter un code a mon application pour pouvoir remplir ma base Sqlite3 depuis un fichier texte (1500 ligne max ) le code marche mais ça prend un temps fou des minutes 3 a 4 min
    alors que sur une base BDE ça ne prend que max 3 ou 4 seconds
    j'ai fait plusieurs recherche je ne comprend toujours pas ou est le problème

    quelqu’un a une idée ?
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    procedure TForm1.Button1Click(Sender: TObject);
     var Softcam: textfile;
         Softcam_Line:string;
         System1,provider1,index1,key1:string;
         H:integer;
    begin
    With ZConnection1 do
    begin
    ////vider la table pour un nouveau chargement
     Database :=(IncludeTrailingPathDelimiter(ExtractFileDir(GetModuleAbsolutePath))+'NW_keys.db');
     ExecuteDirect('DELETE from tblSystems');
     Ztable1.Refresh;
    end;
     
    assignfile(Softcam,(IncludeTrailingPathDelimiter(ExtractFileDir(GetModuleAbsolutePath)))+'Softcam.key');
    reset(Softcam);
     
    while not eof(Softcam) do
    begin
    H:=0;
       readln(Softcam,Softcam_Line);
     
        if (((copy(Softcam_Line,1,1))=('I')) or ((copy(Softcam_Line,1,1))=('S')) or
        ((copy(Softcam_Line,1,1))=('N')) or ((copy(Softcam_Line,1,1))=('W')) or
        ((copy(Softcam_Line,1,1))=('F')) or ((copy(Softcam_Line,1,1))=('V')))
        And ((copy(Softcam_Line,2,1))=(' '))
     
        then
            begin
                 System1:=copy(Softcam_Line,1,1);
                 if (copy(Softcam_Line,7,1)=' ') and (copy(Softcam_Line,10,1)=' ') then
                 begin
                     Provider1:=copy(Softcam_Line,3,4);
                     index1:=copy(Softcam_Line,8,2);
                      while (copy(Softcam_Line,H+11,1)<>' ') and (copy(Softcam_Line,H+11,1)<>';') and (copy(Softcam_Line,H+11,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,11,H);
     
                      ZTable1.Open;
                      ZTable1.First;
                      ZTable1.Append;
                      // ajouter les données
                      ZTable1.FieldByName('Name').Value := System1;
                      ZTable1.FieldByName('ProviderID').Value := provider1;
                      ZTable1.FieldByName('KeyIndex').Value := index1;
                      ZTable1.FieldByName('Key').Value := key1;
                      ZTable1.FieldByName('Comments').Value := DateTimeToStr(now);
                      // Valider
                      ZTable1.Post;
                      ZTable1.Close;
                 end else
                     if (copy(Softcam_Line,9,1)=' ') and (copy(Softcam_Line,12,1)=' ') then
                     begin
                     Provider1:=copy(Softcam_Line,3,6);
                     index1:=copy(Softcam_Line,10,2);
                      while (copy(Softcam_Line,H+13,1)<>' ') and (copy(Softcam_Line,H+13,1)<>';') and (copy(Softcam_Line,H+13,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,13,H);
     
                      ZTable1.Open;
                      ZTable1.First;
                      ZTable1.Append;
                      // ajouter les données
                      ZTable1.FieldByName('Name').Value := System1;
                      ZTable1.FieldByName('ProviderID').Value := provider1;
                      ZTable1.FieldByName('KeyIndex').Value := index1;
                      ZTable1.FieldByName('Key').Value := key1;
                      ZTable1.FieldByName('Comments').Value := DateTimeToStr(now);
                      // Valider
                      ZTable1.Post;
                      ZTable1.Close;
                 end else
                     if (copy(Softcam_Line,11,1)=' ') and (copy(Softcam_Line,14,1)=' ') then
                     begin
                     Provider1:=copy(Softcam_Line,3,8);
                     index1:=copy(Softcam_Line,12,2);
                      while (copy(Softcam_Line,H+15,1)<>' ') and (copy(Softcam_Line,H+15,1)<>';') and (copy(Softcam_Line,H+15,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,15,H);
     
                      ZTable1.Open;
                      ZTable1.First;
                      ZTable1.Append;
                      // ajouter les données
                      ZTable1.FieldByName('Name').Value := System1;
                      ZTable1.FieldByName('ProviderID').Value := provider1;
                      ZTable1.FieldByName('KeyIndex').Value := index1;
                      ZTable1.FieldByName('Key').Value := key1;
                      ZTable1.FieldByName('Comments').Value := DateTimeToStr(now);
                      // Valider
                      ZTable1.Post;
                      ZTable1.Close;
                  end;
     
    /////////////////
            end;
    end;
     
     
    MessageBox(Handle,'File Imported succefly ?',
     '',MB_OK ) ;
     
    closefile(Softcam);
    end;

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 064
    Points : 41 021
    Points
    41 021
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    les causes principales sont dues au nombre de Open, Close et First (ce dernier n'étant pas nécessaire d'ailleurs.

    Rapidement lu , il me semble que le code peut être simplifié

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    With ZConnection1 do
    begin
    ////vider la table pour un nouveau chargement
     Database :=(IncludeTrailingPathDelimiter(ExtractFileDir(GetModuleAbsolutePath))+'NW_keys.db');
     ExecuteDirect('DELETE from tblSystems');
    // Ztable1.Refresh; inutile la table n'est pas ouverte
    end;
    ZTable1.Open;
    assignfile(Softcam,(IncludeTrailingPathDelimiter(ExtractFileDir(GetModuleAbsolutePath)))+'Softcam.key');
    reset(Softcam);
    while not eof(Softcam) do
    begin
       H:=0;
       readln(Softcam,Softcam_Line);
        if (((copy(Softcam_Line,1,1))=('I')) or ((copy(Softcam_Line,1,1))=('S')) or
        ((copy(Softcam_Line,1,1))=('N')) or ((copy(Softcam_Line,1,1))=('W')) or
        ((copy(Softcam_Line,1,1))=('F')) or ((copy(Softcam_Line,1,1))=('V')))
        And ((copy(Softcam_Line,2,1))=(' '))
     
        then
            begin
                 System1:=copy(Softcam_Line,1,1);
                 if (copy(Softcam_Line,7,1)=' ') and (copy(Softcam_Line,10,1)=' ') then
                 begin
                     Provider1:=copy(Softcam_Line,3,4);
                     index1:=copy(Softcam_Line,8,2);
                      while (copy(Softcam_Line,H+11,1)<>' ') and (copy(Softcam_Line,H+11,1)<>';') and (copy(Softcam_Line,H+11,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,11,H);
     
                 end else
                     if (copy(Softcam_Line,9,1)=' ') and (copy(Softcam_Line,12,1)=' ') then
                     begin
                     Provider1:=copy(Softcam_Line,3,6);
                     index1:=copy(Softcam_Line,10,2);
                      while (copy(Softcam_Line,H+13,1)<>' ') and (copy(Softcam_Line,H+13,1)<>';') and (copy(Softcam_Line,H+13,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,13,H);
                  end else
                     if (copy(Softcam_Line,11,1)=' ') and (copy(Softcam_Line,14,1)=' ') then
                     begin
                     Provider1:=copy(Softcam_Line,3,8);
                     index1:=copy(Softcam_Line,12,2);
                      while (copy(Softcam_Line,H+15,1)<>' ') and (copy(Softcam_Line,H+15,1)<>';') and (copy(Softcam_Line,H+15,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,15,H);
     
     
                  end;
                      ZTable1.Append;
                      // ajouter les données
                      ZTable1.FieldByName('Name').Value := System1;
                      ZTable1.FieldByName('ProviderID').Value := provider1;
                      ZTable1.FieldByName('KeyIndex').Value := index1;
                      ZTable1.FieldByName('Key').Value := key1;
                      ZTable1.FieldByName('Comments').Value :=DateTimeToStr(now);
                      // Valider
                      ZTable1.Post;
     
            end;  // Fin de lecture fichier
    ZTable1.Close;
    MessageBox(Handle,'File Imported successfully ?',
     '',MB_OK ) ;
     
    closefile(Softcam);
    end;
    Si "l'ordre" physique des enregistrements n'a pas d'importance (ce que pourrait suggérer la "key" un SQL INSERT serait encore mieux en lieu et place d'une ouverture de table avec append .

    Le bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                     ZTable1.Append;
                      // ajouter les données
                      ZTable1.FieldByName('Name').Value := System1;
                      ZTable1.FieldByName('ProviderID').Value := provider1;
                      ZTable1.FieldByName('KeyIndex').Value := index1;
                      ZTable1.FieldByName('Key').Value := key1;
                      ZTable1.FieldByName('Comments').Value :=DateTimeToStr(now);
                      // Valider
                      ZTable1.Post;
    pourrait être remplacé par une Query paramètrée ou un ExecuteDirect

    Avec une Query
    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
     
    // à la place du open;
    ZQuery.SQL.Text:='INSERT INTO tblSystems(NAME,PROVIDERID,KEYINDEX,KEY,COMMENTS) VALUES (:pN,:pP,:pKI,:pK,:pC)';
    ZQuery.Prepare;
     
    // à la place du Bloc
    // Typer les pramètres serait un plus supplémentaire
    // ZQuery.ParamByName('pN').asString := System1;
     
    ZQuery.ParamByName('pN').Value := System1;
    ZQuery.ParamByName('pP').Value := provider1;
    ZQuery.ParamByName('pKI').Value := index1;
    ZQuery.ParamByName('pK').Value := key1;
    ZQuery.ParamByName('pC').Value :=DateTimeToStr(now);
    ZQuery.ExecSQL;
    Avec ExecuteDirect (améliorable )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    wSQLString: String;
     
    wSQLString:=Format('INSERT INTO tblSystems(NAME,PROVIDERID,KEYINDEX,KEY,COMMENTS) VALUES (%s,%s,%s,%s,%s)',[QuotedStr(System1),
                      QuotedStr(provider1),
                      QuotedStr(index1),
                      QuotedStr(key1),
                      Quoted(StrDateTimeToStr(now)]);
    ZConnection1.ExecuteDirect(wSQLString);
    améliorations
    - selon le type de données au niveau du Format, ne pas oublier les QuotedStrs pour les Strings,
    - déclaration d'une constante pour la partie Gauche 'INSERT ...)'

    Bon Voilà 2 pistes , bon code
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    les causes principales sont dues au nombre de Open, Close et First (ce dernier n'étant pas nécessaire d'ailleurs.

    Rapidement lu , il me semble que le code peut être simplifié

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    With ZConnection1 do
    begin
    ////vider la table pour un nouveau chargement
     Database :=(IncludeTrailingPathDelimiter(ExtractFileDir(GetModuleAbsolutePath))+'NW_keys.db');
     ExecuteDirect('DELETE from tblSystems');
    // Ztable1.Refresh; inutile la table n'est pas ouverte
    end;
    ZTable1.Open;
    assignfile(Softcam,(IncludeTrailingPathDelimiter(ExtractFileDir(GetModuleAbsolutePath)))+'Softcam.key');
    reset(Softcam);
    while not eof(Softcam) do
    begin
       H:=0;
       readln(Softcam,Softcam_Line);
        if (((copy(Softcam_Line,1,1))=('I')) or ((copy(Softcam_Line,1,1))=('S')) or
        ((copy(Softcam_Line,1,1))=('N')) or ((copy(Softcam_Line,1,1))=('W')) or
        ((copy(Softcam_Line,1,1))=('F')) or ((copy(Softcam_Line,1,1))=('V')))
        And ((copy(Softcam_Line,2,1))=(' '))
     
        then
            begin
                 System1:=copy(Softcam_Line,1,1);
                 if (copy(Softcam_Line,7,1)=' ') and (copy(Softcam_Line,10,1)=' ') then
                 begin
                     Provider1:=copy(Softcam_Line,3,4);
                     index1:=copy(Softcam_Line,8,2);
                      while (copy(Softcam_Line,H+11,1)<>' ') and (copy(Softcam_Line,H+11,1)<>';') and (copy(Softcam_Line,H+11,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,11,H);
     
                 end else
                     if (copy(Softcam_Line,9,1)=' ') and (copy(Softcam_Line,12,1)=' ') then
                     begin
                     Provider1:=copy(Softcam_Line,3,6);
                     index1:=copy(Softcam_Line,10,2);
                      while (copy(Softcam_Line,H+13,1)<>' ') and (copy(Softcam_Line,H+13,1)<>';') and (copy(Softcam_Line,H+13,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,13,H);
                  end else
                     if (copy(Softcam_Line,11,1)=' ') and (copy(Softcam_Line,14,1)=' ') then
                     begin
                     Provider1:=copy(Softcam_Line,3,8);
                     index1:=copy(Softcam_Line,12,2);
                      while (copy(Softcam_Line,H+15,1)<>' ') and (copy(Softcam_Line,H+15,1)<>';') and (copy(Softcam_Line,H+15,1)<>'') do
                      H:=H+1;
                      key1:=copy(Softcam_Line,15,H);
     
     
                  end;
                      ZTable1.Append;
                      // ajouter les données
                      ZTable1.FieldByName('Name').Value := System1;
                      ZTable1.FieldByName('ProviderID').Value := provider1;
                      ZTable1.FieldByName('KeyIndex').Value := index1;
                      ZTable1.FieldByName('Key').Value := key1;
                      ZTable1.FieldByName('Comments').Value :=DateTimeToStr(now);
                      // Valider
                      ZTable1.Post;
     
            end;  // Fin de lecture fichier
    ZTable1.Close;
    MessageBox(Handle,'File Imported successfully ?',
     '',MB_OK ) ;
     
    closefile(Softcam);
    end;
    Si "l'ordre" physique des enregistrements n'a pas d'importance (ce que pourrait suggérer la "key" un SQL INSERT serait encore mieux en lieu et place d'une ouverture de table avec append .

    Le bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                     ZTable1.Append;
                      // ajouter les données
                      ZTable1.FieldByName('Name').Value := System1;
                      ZTable1.FieldByName('ProviderID').Value := provider1;
                      ZTable1.FieldByName('KeyIndex').Value := index1;
                      ZTable1.FieldByName('Key').Value := key1;
                      ZTable1.FieldByName('Comments').Value :=DateTimeToStr(now);
                      // Valider
                      ZTable1.Post;
    pourrait être remplacé par une Query paramètrée ou un ExecuteDirect

    Avec une Query
    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
     
    // à la place du open;
    ZQuery.SQL.Text:='INSERT INTO tblSystems(NAME,PROVIDERID,KEYINDEX,KEY,COMMENTS) VALUES (:pN,:pP,:pKI,:pK,:pC)';
    ZQuery.Prepare;
     
    // à la place du Bloc
    // Typer les pramètres serait un plus supplémentaire
    // ZQuery.ParamByName('pN').asString := System1;
     
    ZQuery.ParamByName('pN').Value := System1;
    ZQuery.ParamByName('pP').Value := provider1;
    ZQuery.ParamByName('pKI').Value := index1;
    ZQuery.ParamByName('pK').Value := key1;
    ZQuery.ParamByName('pC').Value :=DateTimeToStr(now);
    ZQuery.ExecSQL;
    Avec ExecuteDirect (améliorable )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    wSQLString: String;
     
    wSQLString:=Format('INSERT INTO tblSystems(NAME,PROVIDERID,KEYINDEX,KEY,COMMENTS) VALUES (%s,%s,%s,%s,%s)',[QuotedStr(System1),
                      QuotedStr(provider1),
                      QuotedStr(index1),
                      QuotedStr(key1),
                      Quoted(StrDateTimeToStr(now)]);
    ZConnection1.ExecuteDirect(wSQLString);

    Bon Voilà 2 pistes , bon code

    Merci !

    après le teste le résultat et quasiment le même

    améliorations
    - selon le type de données au niveau du Format, ne pas oublier les QuotedStrs pour les Strings,
    - déclaration d'une constante pour la partie Gauche 'INSERT ...)'
    le type de donné ce sont tous des TEXT voici comment je crée la table

    ExecuteDirect('CREATE TABLE IF NOT EXISTS tblSystems (id INTEGER PRIMARY KEY NOT NULL,Name TEXT NOT NULL,ProviderID TEXT NOT NULL,KeyIndex TEXT NOT NULL,Key TEXT NOT NULL,Comments TEXT NULL)');

    peut être il faut des paramètres spécial dans la propriété de la connexion ou la table je ne sais pas

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 064
    Points : 41 021
    Points
    41 021
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Night_Wolf1619 Voir le message
    après le teste le résultat et quasiment le même
    j'en suis fortement étonné

    peut être il faut des paramètres spécial dans la propriété de la connexion ou la table je ne sais pas
    Comment est implémenté la valeur id ? "id INTEGER PRIMARY KEY NOT NULL"
    Désactiver cette clé , permettrait un remplissage plus rapide
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    Elle est gérée directement par SQLite qui implémente systématiquement en interne un rowid transparent pour l'utilisateur, qui devient la clef INTEGER PRIMARY KEY si elle est crée par l'utilisateur; Je ne pense pas que le NOT NULL change ce comportement.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Est-ce que tu utilises les transactions ?

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 064
    Points : 41 021
    Points
    41 021
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par GoustiFruit Voir le message
    Est-ce que tu utilises les transactions ?
    par défaut les composants ZEOSDBO sont en ReadCommitted , en utilisant le ExecuteDirect cela n'aurait aucune importance puisque chacun de ces derniers serait une transaction .

    Non , je crois qu'il y a encore quelque chose dans le code , mais il faudrait nous fournir ce dernier après les corrections suggérées au lieu de me citer et dire

    pas de changement
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    par défaut les composants ZEOSDBO sont en ReadCommitted , en utilisant le ExecuteDirect cela n'aurait aucune importance puisque chacun de ces derniers serait une transaction .
    Merci pour votre aide
    désolé je me suis peut être mal exprimer je ne dit pas qu il n y a pas de changement j'ai dit " quasiment le même " presque le même juste un gain de quelque seconde

    Non , je crois qu'il y a encore quelque chose dans le code , mais il faudrait nous fournir ce dernier après les corrections suggérées au lieu de me citer et dire pas de changement
    pour cela j’ai mis que le code de l'importation du fichier texte dans un projet teste pour voir mais j'ai eu le même résultat

    voici la source et le exe du teste
    j'ai réduit un peut le fichier texte pour gagner un peut de temps
    il faut placé le dossier testesqlite dans C:\
    juste a cause du chemin de la base qui et configurer comme tel
    j'ai ajouter un Memo pour voir le déroulement
    j'ai mis aussi le même teste avec une base BDE et avec le même code que j'ai poster en premier
    une dernier chose je travaille sur delphi 7 il faut avoir la BDE installe pour que le 2eme teste marche
    vous allez voir la différence et flagrante

    le lien du teste http://www.sendspace.com/file/k3gwa2

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    un autre lien si le premier ne marche pas http://www.sendspace.com/file/jyf1cb

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 064
    Points : 41 021
    Points
    41 021
    Billets dans le blog
    62
    Par défaut
    je voulais juste voir la partie source incriminée (je n'ai pas envie d'installer un exe)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    je voulais juste voir la partie source incriminée (je n'ai pas envie d'installer un exe)
    il ya les deux source + exe ,, tu na pas a installé le exe c'est juste un teste ,,tu le teste directement ,, il n'installe rien il n'ajoute rien que le code de l'importation .
    par ailleurs dans d'autre forum il y on a qui on rencontrer le même problème

    j'ai pas bien compris car c’était en anglais ce que j'ai compris et que la connections doit être dans la source a cause de sqlite mono poste je ne sai pas quoi ?????

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Sur le lien suivant, ma version utilisant les composants SQLite Aducom.
    Dans ma machine virtuelle l'opération prend environ 60ms.

    -> http://www.sendspace.com/file/dvch45

  13. #13
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par GoustiFruit Voir le message
    Sur le lien suivant, ma version utilisant les composants SQLite Aducom.
    Dans ma machine virtuelle l'opération prend environ 60ms.

    -> http://www.sendspace.com/file/dvch45
    Merci beaucoup !!

    c'est exactement comme ça que normalement ça doit ce dérouler

    le problème maintenant est doit je continuer a chercher le problème avec les composants zeolib ou tout recommencé avec SQLite Aducom que je n'ai jamais utiliser ????

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    A toi de voir, moi je n'ai jamais utilisé les composants Zeolib et comme je ne voulais pas les installer juste pour ça, j'ai modifié le code pour que ça marche avec les composants Aducom.
    Si tu compares ton code et le mien tu verras que la principale différence vient du fait que j'ai sorti la requête préparée de la boucle, puisqu'il suffit de la préparer une seule fois et de changer ensuite les paramètres seulement. La boucle est encadrée par un StartTransaction/Commit pour valider toutes les insertions en une seule fois. Je ne sais pas comment ça se passe avec les compos Zeos...

  15. #15
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par GoustiFruit Voir le message
    A toi de voir, moi je n'ai jamais utilisé les composants Zeolib et comme je ne voulais pas les installer juste pour ça, j'ai modifié le code pour que ça marche avec les composants Aducom.
    Si tu compares ton code et le mien tu verras que la principale différence vient du fait que j'ai sorti la requête préparée de la boucle, puisqu'il suffit de la préparer une seule fois et de changer ensuite les paramètres seulement. La boucle est encadrée par un StartTransaction/Commit pour valider toutes les insertions en une seule fois. Je ne sais pas comment ça se passe avec les compos Zeos...
    je crois que même qu'a l’intérieur de la boucle ça marchera ça prendra un peut de ms en pluse mais ça restera responsable
    moi je suis entrain de migré mon application de BDE ver Sqlite et je suis a 80% du boulot, il me reste juste ce problème,,
    alors je vais chercher un peut ,,,peut être je trouverais une solution sinon je suis obligé de passer ver SQLite Aducom .

    je me suis rendu au site de SQLite Aducom j'ai trouver les composant pour D4 D5 D2007 D2009 mais pas de D7 ?

    il n y a pas pour Delphi7

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    je me suis rendu au site de SQLite Aducom j'ai trouver les composant pour D4 D5 D2007 D2009 mais pas de D7 ?
    A cette adresse http://www.aducom.com/cms/download.php?list.11, tu as des composants, pour Sqlite, qui vont de Delphi 4 à Delphi 2007. Donc Delphi 7 est bien inclus.

    J'ai une application qui fonctionne parfaitement avec ceux-ci.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par seabs Voir le message
    Bonjour,



    A cette adresse http://www.aducom.com/cms/download.php?list.11, tu as des composants, pour Sqlite, qui vont de Delphi 4 à Delphi 2007. Donc Delphi 7 est bien inclus.

    J'ai une application qui fonctionne parfaitement avec ceux-ci.
    c'est exactement a cette adresse que je me suis rendu après le téléchargement je ne trouve pas le package pour D7 ?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    y a un package pour D4 D5 et un autre sans nom alors je me suis dit que le sans nom et pour tout les autre je l'ai installé ça a l'aire de bien fonctionné

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    Il faut prendre la dernière version, appelée "V2009.02.A" et si mes souvenirs sont bons (ça fait longtemps que je les ai installés) il faut seulement compiler et installer le paquet "asqlite3.dpk" dans l'IDE.
    PS: et penser à récupérer une version récente de "sqlite3.dll" ! Les composants Aducom peuvent utiliser une dll externe ou bien la compiler directement dans l'exécutable, mais c'est un peu plus compliqué...

  20. #20
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 159
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par GoustiFruit Voir le message
    Il faut prendre la dernière version, appelée "V2009.02.A" et si mes souvenirs sont bons (ça fait longtemps que je les ai installés) il faut seulement compiler et installer le paquet "asqlite3.dpk" dans l'IDE.
    PS: et penser à récupérer une version récente de "sqlite3.dll" ! Les composants Aducom peuvent utiliser une dll externe ou bien la compiler directement dans l'exécutable, mais c'est un peu plus compliqué...
    eh oui je viens de constaté que je me suis planté on installons ce paquet sans nom

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] remplir une base de données a partir d'un dossier
    Par mcmahon dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/06/2014, 14h47
  2. [Débutant] Remplir une base de données ACCESS à partir des textBox
    Par strafor dans le forum VB.NET
    Réponses: 6
    Dernier message: 17/11/2013, 01h54
  3. Réponses: 1
    Dernier message: 19/07/2012, 14h13
  4. remplir une base de données à partir d'un gridview
    Par marie-anne dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/11/2010, 12h36
  5. Réponses: 3
    Dernier message: 29/03/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo