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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 076
    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 076
    Points : 41 026
    Points
    41 026
    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 076
    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 076
    Points : 41 026
    Points
    41 026
    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 862
    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 862
    Points : 11 324
    Points
    11 324
    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 ?

+ Répondre à la discussion
Cette discussion est résolue.

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