2009-07-31 9 views
4

J'essaie d'accélérer mon code et le goulot d'étranglement semble être les instructions d'insertion individuelles vers une MDB Jet depuis l'extérieur d'Access via ODBC. J'ai besoin d'insérer 100 lignes à la fois et je dois répéter cela plusieurs fois.Code SQL pour insérer plusieurs lignes dans la table ms-access

Il est possible d'insérer plusieurs lignes dans une table avec du code SQL? Voici quelques trucs que j'ai essayés mais aucun d'eux n'a fonctionné. Aucune suggestion?

INSERT INTO tblSimulation (p, cfYear, cfLocation, Delta, Design, SigmaLoc, 
           Sigma, SampleSize, Intercept) VALUES 
(0, 2, 8.3, 0, 1, 0.5, 0.2, 220, 3.4), 
(0, 2.4, 7.8, 0, 1, 0.5, 0.2, 220, 3.4), 
(0, 2.3, 5.9, 0, 1, 0.5, 0.2, 220, 3.4) 


INSERT INTO tblSimulation (p, cfYear, cfLocation, Delta, Design, SigmaLoc, 
           Sigma, SampleSize, Intercept) VALUES 
(0, 2, 8.3, 0, 1, 0.5, 0.2, 220, 3.4) UNION 
(0, 2.4, 7.8, 0, 1, 0.5, 0.2, 220, 3.4) UNION 
(0, 2.3, 5.9, 0, 1, 0.5, 0.2, 220, 3.4) 

Répondre

2

J'ai trouvé une solution élégante dans R, (le logiciel avec lequel je travaille) Le paquet RODBC a une fonction sqlSave qui permet d'ajouter et e ntire data.frame à la fois à une table. Cela fonctionne presque deux fois plus vite que les insertions individuelles dans une transaction.

library(RODBC) 
MDB <- odbcConnectAccess("database.mdb") 
sqlSave(channel = MDB, dat = sims, tablename = "tblSimulation", append = TRUE, rownames = FALSE) 
odbcClose(MDB) 
3

Pas que je sache. Et j'ai déjà ressenti cette douleur. Les bonnes nouvelles sont que si vous encapsulez l'insertion dans une transaction et ne fermez pas la connexion entre chaque appel (par exemple - passez la commande en tant que paramètre), alors il est plus rapide que open() -> INSERT-> close() est.

Utilisez un code modèle quelque chose comme:

using (DbConnection conn = new OdbcConnection()) 
using (DbCommand cmd = conn.CreateCommand()) 
{ 
    cmd.CommandText = "INSERT INTO foo(bar) VALUES (@bar)"; 
    DbParameter p = cmd.CreateParameter(); 
    p.ParameterName = "@bar"; 
    cmd.CommandType = CommandType.Text; 
    conn.Open(); 
    using (DbTransaction tran = conn.BeginTransaction()) 
    { 
     cmd.Transaction = tran; 
     try 
     { 
      for (int i = 0; i < 1000; i++) 
      { 
       p.Value = i; 
       cmd.ExecuteNonQuery(); 
      } 
      tran.Commit(); 
      conn.Close(); 
     } 
     catch (Exception) 
     { 
      tran.Rollback(); 
      throw; 
     } 
    } 
} 
+0

Quand je essayez la commande SQL "BEGIN TRANSACTION;" le pilote ODBC renvoie une erreur: instruction SQL Ilegal. DELETE, INSERT, PROCEDURE, SELECT ou UPDATE attendus. Les transactions ne fonctionnent donc pas via ODBC? – Thierry

+0

Ne pas les ajouter à votre commande SQL, nous une transaction dans votre application. Je vais mettre à jour ma réponse. –

+1

Merci. Maintenant ça marche. Avec 20.000 lignes j'ai obtenu un gain de vitesse d'environ 16%. – Thierry

1

Avez-vous d'utiliser SQL? Sinon, vous aurez probablement de meilleures performances si vous insérez des lignes en utilisant un jeu d'enregistrements:

Set rs=db.OpenRecordset("tblSimulation", dbOpenDynaset) 
With rs 
    .AddNew 
    !p=0 
    !cfYear=2 
    ' And so on 
    .Update 
End With 
+0

Je me connecte à la mdb de l'extérieur Access via ODBC. C'est pourquoi j'utilise SQL – Thierry

+0

ODBC n'affecterait pas cela. (Du moins pas que je le sache, je suis toujours prêt à en apprendre davantage sur une autre bizarrerie avec ODBC.) – Smandoli

+0

Vous pouvez toujours utiliser un kit de démarrage. Vous obtenez environ 100 fois la vitesse en tant qu'inserts SQL séparés. –

0

Est-il possible d'écrire les lignes à un fichier texte? Vous pouvez insérer toutes les lignes de cela avec ADO.

db = "C:\Docs\ltd.mdb" 

Set cn = CreateObject("ADODB.Connection") 

cn.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & _ 
    "Data Source =" & db 

sSQL = "INSERT INTO New (id,schedno) " _ 
& "SELECT id,schedno FROM [new.txt] IN '' " _ 
& "'text;HDR=Yes;FMT=Delimited;database=C:\Docs\';" 

cn.Execute sSQL 
0

Le mot-clé VALUES est réservé aux enregistrements uniques. Vous pouvez insérer plusieurs enregistrements de SOURCE_TABLE en utilisant le mot-clé SELECT:

INSERT INTO target_table (field1, field2, ....) 
    SELECT field1, field2, .... 
    FROM source_table; 

Donc, si vos valeurs proviennent d'une table ou une requête, vous devriez être bon. Et s'ils ne le sont pas, peut-être que vous pouvez les mettre dans une table?

+0

Oh, je vois que Remou atteint aussi le mot-clé SELECT. L'utiliser pour récupérer un fichier texte est très intéressant! – Smandoli

0

Vous avez besoin d'une table dont la ligne contient au moins une ligne (exactement une ligne est la meilleure, auquel cas vous pouvez omettre le mot-clé DISTINCT). Ici, j'utilise ma table auxiliaire d'édition standard Calendar. Au sein de la table dérivée DT1, vous devez fournir les noms de corrélation de colonne (familièrement « les alias ») pour la première apparition seulement:

INSERT INTO tblSimulation (p, cfYear, cfLocation, [Delta], Design, SigmaLoc, 
           Sigma, SampleSize, Intercept) 
SELECT DT1.p, DT1.cfYear, DT1.cfLocation, 
     DT1.Delta, DT1.Design, DT1.SigmaLoc, 
     DT1.Sigma, DT1.SampleSize, DT1.Intercept 
    FROM (
     SELECT DISTINCT 0 AS p, 2 AS cfYear, 8.3 AS cfLocation, 
       0 AS Delta, 1 AS Design, 0.5 AS SigmaLoc, 
       0.2 AS Sigma, 220 AS SampleSize, 3.4 AS Intercept 
      FROM Calendar 
     UNION ALL 
     SELECT DISTINCT 0, 2.4, 7.8, 
       0, 1, 0.5, 
       0.2, 220, 3.4 
      FROM Calendar 
     UNION ALL 
     SELECT DISTINCT 0, 2.3, 5.9, 
       0, 1, 0.5, 
       0.2, 220, 3.4 
      FROM Calendar 
     ) AS DT1; 

Maintenant pour les mauvaises nouvelles: vous ne pouvez créer 49 UNION ALL s dans un seul requête après laquelle le moteur de base de données Access se plaint qu'il est «trop complexe».

SQL dynamique est à éviter en faveur d'une procédure stockée et de toute façon les noms de corrélation de colonne dans la table dérivée rend SQL dynamique une peine pour ce type de construction. Voici donc un exemple utilisant un proc avec 49 * 9 = 441 paramètres pour créer jusqu'à 49 lignes en une seule exécution.

Quelqu'un a posé des questions sur les performances.Eh bien, ce proc crée 49 lignes dans environ 100 millisecondes sur ma machine

Schéma:

CREATE TABLE OneRowTable 
(
    lock CHAR(1) DEFAULT 'x' NOT NULL PRIMARY KEY, 
    CONSTRAINT OneRowTable__lock CHECK (lock = 'x') 
) 
; 
INSERT INTO OneRowTable (lock) VALUES ('x') 
; 
CREATE TABLE tblSimulation 
(
p DECIMAL(19,4), 
cfYear DECIMAL(19,4), 
cfLocation DECIMAL(19,4), 
Delta DECIMAL(19,4), 
Design DECIMAL(19,4), 
SigmaLoc DECIMAL(19,4), 
Sigma DECIMAL(19,4), 
SampleSize DECIMAL(19,4), 
Intercept DECIMAL(19,4) 
) 
; 
CREATE PROCEDURE Add100Simulations 
(
:001_1 DECIMAL(19, 4) = NULL, 
:001_2 DECIMAL(19, 4) = NULL, 
:001_3 DECIMAL(19, 4) = NULL, 
:001_4 DECIMAL(19, 4) = NULL, 
:001_5 DECIMAL(19, 4) = NULL, 
:001_6 DECIMAL(19, 4) = NULL, 
:001_7 DECIMAL(19, 4) = NULL, 
:001_8 DECIMAL(19, 4) = NULL, 
:001_9 DECIMAL(19, 4) = NULL, 
:002_1 DECIMAL(19, 4) = NULL, 
:002_2 DECIMAL(19, 4) = NULL, 
:002_3 DECIMAL(19, 4) = NULL, 
:002_4 DECIMAL(19, 4) = NULL, 
:002_5 DECIMAL(19, 4) = NULL, 
:002_6 DECIMAL(19, 4) = NULL, 
:002_7 DECIMAL(19, 4) = NULL, 
:002_8 DECIMAL(19, 4) = NULL, 
:002_9 DECIMAL(19, 4) = NULL, 
:003_1 DECIMAL(19, 4) = NULL, 
:003_2 DECIMAL(19, 4) = NULL, 
:003_3 DECIMAL(19, 4) = NULL, 
:003_4 DECIMAL(19, 4) = NULL, 
:003_5 DECIMAL(19, 4) = NULL, 
:003_6 DECIMAL(19, 4) = NULL, 
:003_7 DECIMAL(19, 4) = NULL, 
:003_8 DECIMAL(19, 4) = NULL, 
:003_9 DECIMAL(19, 4) = NULL, 
:004_1 DECIMAL(19, 4) = NULL, 
:004_2 DECIMAL(19, 4) = NULL, 
:004_3 DECIMAL(19, 4) = NULL, 
:004_4 DECIMAL(19, 4) = NULL, 
:004_5 DECIMAL(19, 4) = NULL, 
:004_6 DECIMAL(19, 4) = NULL, 
:004_7 DECIMAL(19, 4) = NULL, 
:004_8 DECIMAL(19, 4) = NULL, 
:004_9 DECIMAL(19, 4) = NULL, 
:005_1 DECIMAL(19, 4) = NULL, 
:005_2 DECIMAL(19, 4) = NULL, 
:005_3 DECIMAL(19, 4) = NULL, 
:005_4 DECIMAL(19, 4) = NULL, 
:005_5 DECIMAL(19, 4) = NULL, 
:005_6 DECIMAL(19, 4) = NULL, 
:005_7 DECIMAL(19, 4) = NULL, 
:005_8 DECIMAL(19, 4) = NULL, 
:005_9 DECIMAL(19, 4) = NULL, 
:006_1 DECIMAL(19, 4) = NULL, 
:006_2 DECIMAL(19, 4) = NULL, 
:006_3 DECIMAL(19, 4) = NULL, 
:006_4 DECIMAL(19, 4) = NULL, 
:006_5 DECIMAL(19, 4) = NULL, 
:006_6 DECIMAL(19, 4) = NULL, 
:006_7 DECIMAL(19, 4) = NULL, 
:006_8 DECIMAL(19, 4) = NULL, 
:006_9 DECIMAL(19, 4) = NULL, 
:007_1 DECIMAL(19, 4) = NULL, 
:007_2 DECIMAL(19, 4) = NULL, 
:007_3 DECIMAL(19, 4) = NULL, 
:007_4 DECIMAL(19, 4) = NULL, 
:007_5 DECIMAL(19, 4) = NULL, 
:007_6 DECIMAL(19, 4) = NULL, 
:007_7 DECIMAL(19, 4) = NULL, 
:007_8 DECIMAL(19, 4) = NULL, 
:007_9 DECIMAL(19, 4) = NULL, 
:008_1 DECIMAL(19, 4) = NULL, 
:008_2 DECIMAL(19, 4) = NULL, 
:008_3 DECIMAL(19, 4) = NULL, 
:008_4 DECIMAL(19, 4) = NULL, 
:008_5 DECIMAL(19, 4) = NULL, 
:008_6 DECIMAL(19, 4) = NULL, 
:008_7 DECIMAL(19, 4) = NULL, 
:008_8 DECIMAL(19, 4) = NULL, 
:008_9 DECIMAL(19, 4) = NULL, 
:009_1 DECIMAL(19, 4) = NULL, 
:009_2 DECIMAL(19, 4) = NULL, 
:009_3 DECIMAL(19, 4) = NULL, 
:009_4 DECIMAL(19, 4) = NULL, 
:009_5 DECIMAL(19, 4) = NULL, 
:009_6 DECIMAL(19, 4) = NULL, 
:009_7 DECIMAL(19, 4) = NULL, 
:009_8 DECIMAL(19, 4) = NULL, 
:009_9 DECIMAL(19, 4) = NULL, 
:010_1 DECIMAL(19, 4) = NULL, 
:010_2 DECIMAL(19, 4) = NULL, 
:010_3 DECIMAL(19, 4) = NULL, 
:010_4 DECIMAL(19, 4) = NULL, 
:010_5 DECIMAL(19, 4) = NULL, 
:010_6 DECIMAL(19, 4) = NULL, 
:010_7 DECIMAL(19, 4) = NULL, 
:010_8 DECIMAL(19, 4) = NULL, 
:010_9 DECIMAL(19, 4) = NULL, 
:011_1 DECIMAL(19, 4) = NULL, 
:011_2 DECIMAL(19, 4) = NULL, 
:011_3 DECIMAL(19, 4) = NULL, 
:011_4 DECIMAL(19, 4) = NULL, 
:011_5 DECIMAL(19, 4) = NULL, 
:011_6 DECIMAL(19, 4) = NULL, 
:011_7 DECIMAL(19, 4) = NULL, 
:011_8 DECIMAL(19, 4) = NULL, 
:011_9 DECIMAL(19, 4) = NULL, 
:012_1 DECIMAL(19, 4) = NULL, 
:012_2 DECIMAL(19, 4) = NULL, 
:012_3 DECIMAL(19, 4) = NULL, 
:012_4 DECIMAL(19, 4) = NULL, 
:012_5 DECIMAL(19, 4) = NULL, 
:012_6 DECIMAL(19, 4) = NULL, 
:012_7 DECIMAL(19, 4) = NULL, 
:012_8 DECIMAL(19, 4) = NULL, 
:012_9 DECIMAL(19, 4) = NULL, 
:013_1 DECIMAL(19, 4) = NULL, 
:013_2 DECIMAL(19, 4) = NULL, 
:013_3 DECIMAL(19, 4) = NULL, 
:013_4 DECIMAL(19, 4) = NULL, 
:013_5 DECIMAL(19, 4) = NULL, 
:013_6 DECIMAL(19, 4) = NULL, 
:013_7 DECIMAL(19, 4) = NULL, 
:013_8 DECIMAL(19, 4) = NULL, 
:013_9 DECIMAL(19, 4) = NULL, 
:014_1 DECIMAL(19, 4) = NULL, 
:014_2 DECIMAL(19, 4) = NULL, 
:014_3 DECIMAL(19, 4) = NULL, 
:014_4 DECIMAL(19, 4) = NULL, 
:014_5 DECIMAL(19, 4) = NULL, 
:014_6 DECIMAL(19, 4) = NULL, 
:014_7 DECIMAL(19, 4) = NULL, 
:014_8 DECIMAL(19, 4) = NULL, 
:014_9 DECIMAL(19, 4) = NULL, 
:015_1 DECIMAL(19, 4) = NULL, 
:015_2 DECIMAL(19, 4) = NULL, 
:015_3 DECIMAL(19, 4) = NULL, 
:015_4 DECIMAL(19, 4) = NULL, 
:015_5 DECIMAL(19, 4) = NULL, 
:015_6 DECIMAL(19, 4) = NULL, 
:015_7 DECIMAL(19, 4) = NULL, 
:015_8 DECIMAL(19, 4) = NULL, 
:015_9 DECIMAL(19, 4) = NULL, 
:016_1 DECIMAL(19, 4) = NULL, 
:016_2 DECIMAL(19, 4) = NULL, 
:016_3 DECIMAL(19, 4) = NULL, 
:016_4 DECIMAL(19, 4) = NULL, 
:016_5 DECIMAL(19, 4) = NULL, 
:016_6 DECIMAL(19, 4) = NULL, 
:016_7 DECIMAL(19, 4) = NULL, 
:016_8 DECIMAL(19, 4) = NULL, 
:016_9 DECIMAL(19, 4) = NULL, 
:017_1 DECIMAL(19, 4) = NULL, 
:017_2 DECIMAL(19, 4) = NULL, 
:017_3 DECIMAL(19, 4) = NULL, 
:017_4 DECIMAL(19, 4) = NULL, 
:017_5 DECIMAL(19, 4) = NULL, 
:017_6 DECIMAL(19, 4) = NULL, 
:017_7 DECIMAL(19, 4) = NULL, 
:017_8 DECIMAL(19, 4) = NULL, 
:017_9 DECIMAL(19, 4) = NULL, 
:018_1 DECIMAL(19, 4) = NULL, 
:018_2 DECIMAL(19, 4) = NULL, 
:018_3 DECIMAL(19, 4) = NULL, 
:018_4 DECIMAL(19, 4) = NULL, 
:018_5 DECIMAL(19, 4) = NULL, 
:018_6 DECIMAL(19, 4) = NULL, 
:018_7 DECIMAL(19, 4) = NULL, 
:018_8 DECIMAL(19, 4) = NULL, 
:018_9 DECIMAL(19, 4) = NULL, 
:019_1 DECIMAL(19, 4) = NULL, 
:019_2 DECIMAL(19, 4) = NULL, 
:019_3 DECIMAL(19, 4) = NULL, 
:019_4 DECIMAL(19, 4) = NULL, 
:019_5 DECIMAL(19, 4) = NULL, 
:019_6 DECIMAL(19, 4) = NULL, 
:019_7 DECIMAL(19, 4) = NULL, 
:019_8 DECIMAL(19, 4) = NULL, 
:019_9 DECIMAL(19, 4) = NULL, 
:020_1 DECIMAL(19, 4) = NULL, 
:020_2 DECIMAL(19, 4) = NULL, 
:020_3 DECIMAL(19, 4) = NULL, 
:020_4 DECIMAL(19, 4) = NULL, 
:020_5 DECIMAL(19, 4) = NULL, 
:020_6 DECIMAL(19, 4) = NULL, 
:020_7 DECIMAL(19, 4) = NULL, 
:020_8 DECIMAL(19, 4) = NULL, 
:020_9 DECIMAL(19, 4) = NULL, 
:021_1 DECIMAL(19, 4) = NULL, 
:021_2 DECIMAL(19, 4) = NULL, 
:021_3 DECIMAL(19, 4) = NULL, 
:021_4 DECIMAL(19, 4) = NULL, 
:021_5 DECIMAL(19, 4) = NULL, 
:021_6 DECIMAL(19, 4) = NULL, 
:021_7 DECIMAL(19, 4) = NULL, 
:021_8 DECIMAL(19, 4) = NULL, 
:021_9 DECIMAL(19, 4) = NULL, 
:022_1 DECIMAL(19, 4) = NULL, 
:022_2 DECIMAL(19, 4) = NULL, 
:022_3 DECIMAL(19, 4) = NULL, 
:022_4 DECIMAL(19, 4) = NULL, 
:022_5 DECIMAL(19, 4) = NULL, 
:022_6 DECIMAL(19, 4) = NULL, 
:022_7 DECIMAL(19, 4) = NULL, 
:022_8 DECIMAL(19, 4) = NULL, 
:022_9 DECIMAL(19, 4) = NULL, 
:023_1 DECIMAL(19, 4) = NULL, 
:023_2 DECIMAL(19, 4) = NULL, 
:023_3 DECIMAL(19, 4) = NULL, 
:023_4 DECIMAL(19, 4) = NULL, 
:023_5 DECIMAL(19, 4) = NULL, 
:023_6 DECIMAL(19, 4) = NULL, 
:023_7 DECIMAL(19, 4) = NULL, 
:023_8 DECIMAL(19, 4) = NULL, 
:023_9 DECIMAL(19, 4) = NULL, 
:024_1 DECIMAL(19, 4) = NULL, 
:024_2 DECIMAL(19, 4) = NULL, 
:024_3 DECIMAL(19, 4) = NULL, 
:024_4 DECIMAL(19, 4) = NULL, 
:024_5 DECIMAL(19, 4) = NULL, 
:024_6 DECIMAL(19, 4) = NULL, 
:024_7 DECIMAL(19, 4) = NULL, 
:024_8 DECIMAL(19, 4) = NULL, 
:024_9 DECIMAL(19, 4) = NULL, 
:025_1 DECIMAL(19, 4) = NULL, 
:025_2 DECIMAL(19, 4) = NULL, 
:025_3 DECIMAL(19, 4) = NULL, 
:025_4 DECIMAL(19, 4) = NULL, 
:025_5 DECIMAL(19, 4) = NULL, 
:025_6 DECIMAL(19, 4) = NULL, 
:025_7 DECIMAL(19, 4) = NULL, 
:025_8 DECIMAL(19, 4) = NULL, 
:025_9 DECIMAL(19, 4) = NULL, 
:026_1 DECIMAL(19, 4) = NULL, 
:026_2 DECIMAL(19, 4) = NULL, 
:026_3 DECIMAL(19, 4) = NULL, 
:026_4 DECIMAL(19, 4) = NULL, 
:026_5 DECIMAL(19, 4) = NULL, 
:026_6 DECIMAL(19, 4) = NULL, 
:026_7 DECIMAL(19, 4) = NULL, 
:026_8 DECIMAL(19, 4) = NULL, 
:026_9 DECIMAL(19, 4) = NULL, 
:027_1 DECIMAL(19, 4) = NULL, 
:027_2 DECIMAL(19, 4) = NULL, 
:027_3 DECIMAL(19, 4) = NULL, 
:027_4 DECIMAL(19, 4) = NULL, 
:027_5 DECIMAL(19, 4) = NULL, 
:027_6 DECIMAL(19, 4) = NULL, 
:027_7 DECIMAL(19, 4) = NULL, 
:027_8 DECIMAL(19, 4) = NULL, 
:027_9 DECIMAL(19, 4) = NULL, 
:028_1 DECIMAL(19, 4) = NULL, 
:028_2 DECIMAL(19, 4) = NULL, 
:028_3 DECIMAL(19, 4) = NULL, 
:028_4 DECIMAL(19, 4) = NULL, 
:028_5 DECIMAL(19, 4) = NULL, 
:028_6 DECIMAL(19, 4) = NULL, 
:028_7 DECIMAL(19, 4) = NULL, 
:028_8 DECIMAL(19, 4) = NULL, 
:028_9 DECIMAL(19, 4) = NULL, 
:029_1 DECIMAL(19, 4) = NULL, 
:029_2 DECIMAL(19, 4) = NULL, 
:029_3 DECIMAL(19, 4) = NULL, 
:029_4 DECIMAL(19, 4) = NULL, 
:029_5 DECIMAL(19, 4) = NULL, 
:029_6 DECIMAL(19, 4) = NULL, 
:029_7 DECIMAL(19, 4) = NULL, 
:029_8 DECIMAL(19, 4) = NULL, 
:029_9 DECIMAL(19, 4) = NULL, 
:030_1 DECIMAL(19, 4) = NULL, 
:030_2 DECIMAL(19, 4) = NULL, 
:030_3 DECIMAL(19, 4) = NULL, 
:030_4 DECIMAL(19, 4) = NULL, 
:030_5 DECIMAL(19, 4) = NULL, 
:030_6 DECIMAL(19, 4) = NULL, 
:030_7 DECIMAL(19, 4) = NULL, 
:030_8 DECIMAL(19, 4) = NULL, 
:030_9 DECIMAL(19, 4) = NULL, 
:031_1 DECIMAL(19, 4) = NULL, 
:031_2 DECIMAL(19, 4) = NULL, 
:031_3 DECIMAL(19, 4) = NULL, 
:031_4 DECIMAL(19, 4) = NULL, 
:031_5 DECIMAL(19, 4) = NULL, 
:031_6 DECIMAL(19, 4) = NULL, 
:031_7 DECIMAL(19, 4) = NULL, 
:031_8 DECIMAL(19, 4) = NULL, 
:031_9 DECIMAL(19, 4) = NULL, 
:032_1 DECIMAL(19, 4) = NULL, 
:032_2 DECIMAL(19, 4) = NULL, 
:032_3 DECIMAL(19, 4) = NULL, 
:032_4 DECIMAL(19, 4) = NULL, 
:032_5 DECIMAL(19, 4) = NULL, 
:032_6 DECIMAL(19, 4) = NULL, 
:032_7 DECIMAL(19, 4) = NULL, 
:032_8 DECIMAL(19, 4) = NULL, 
:032_9 DECIMAL(19, 4) = NULL, 
:033_1 DECIMAL(19, 4) = NULL, 
:033_2 DECIMAL(19, 4) = NULL, 
:033_3 DECIMAL(19, 4) = NULL, 
:033_4 DECIMAL(19, 4) = NULL, 
:033_5 DECIMAL(19, 4) = NULL, 
:033_6 DECIMAL(19, 4) = NULL, 
:033_7 DECIMAL(19, 4) = NULL, 
:033_8 DECIMAL(19, 4) = NULL, 
:033_9 DECIMAL(19, 4) = NULL, 
:034_1 DECIMAL(19, 4) = NULL, 
:034_2 DECIMAL(19, 4) = NULL, 
:034_3 DECIMAL(19, 4) = NULL, 
:034_4 DECIMAL(19, 4) = NULL, 
:034_5 DECIMAL(19, 4) = NULL, 
:034_6 DECIMAL(19, 4) = NULL, 
:034_7 DECIMAL(19, 4) = NULL, 
:034_8 DECIMAL(19, 4) = NULL, 
:034_9 DECIMAL(19, 4) = NULL, 
:035_1 DECIMAL(19, 4) = NULL, 
:035_2 DECIMAL(19, 4) = NULL, 
:035_3 DECIMAL(19, 4) = NULL, 
:035_4 DECIMAL(19, 4) = NULL, 
:035_5 DECIMAL(19, 4) = NULL, 
:035_6 DECIMAL(19, 4) = NULL, 
:035_7 DECIMAL(19, 4) = NULL, 
:035_8 DECIMAL(19, 4) = NULL, 
:035_9 DECIMAL(19, 4) = NULL, 
:036_1 DECIMAL(19, 4) = NULL, 
:036_2 DECIMAL(19, 4) = NULL, 
:036_3 DECIMAL(19, 4) = NULL, 
:036_4 DECIMAL(19, 4) = NULL, 
:036_5 DECIMAL(19, 4) = NULL, 
:036_6 DECIMAL(19, 4) = NULL, 
:036_7 DECIMAL(19, 4) = NULL, 
:036_8 DECIMAL(19, 4) = NULL, 
:036_9 DECIMAL(19, 4) = NULL, 
:037_1 DECIMAL(19, 4) = NULL, 
:037_2 DECIMAL(19, 4) = NULL, 
:037_3 DECIMAL(19, 4) = NULL, 
:037_4 DECIMAL(19, 4) = NULL, 
:037_5 DECIMAL(19, 4) = NULL, 
:037_6 DECIMAL(19, 4) = NULL, 
:037_7 DECIMAL(19, 4) = NULL, 
:037_8 DECIMAL(19, 4) = NULL, 
:037_9 DECIMAL(19, 4) = NULL, 
:038_1 DECIMAL(19, 4) = NULL, 
:038_2 DECIMAL(19, 4) = NULL, 
:038_3 DECIMAL(19, 4) = NULL, 
:038_4 DECIMAL(19, 4) = NULL, 
:038_5 DECIMAL(19, 4) = NULL, 
:038_6 DECIMAL(19, 4) = NULL, 
:038_7 DECIMAL(19, 4) = NULL, 
:038_8 DECIMAL(19, 4) = NULL, 
:038_9 DECIMAL(19, 4) = NULL, 
:039_1 DECIMAL(19, 4) = NULL, 
:039_2 DECIMAL(19, 4) = NULL, 
:039_3 DECIMAL(19, 4) = NULL, 
:039_4 DECIMAL(19, 4) = NULL, 
:039_5 DECIMAL(19, 4) = NULL, 
:039_6 DECIMAL(19, 4) = NULL, 
:039_7 DECIMAL(19, 4) = NULL, 
:039_8 DECIMAL(19, 4) = NULL, 
:039_9 DECIMAL(19, 4) = NULL, 
:040_1 DECIMAL(19, 4) = NULL, 
:040_2 DECIMAL(19, 4) = NULL, 
:040_3 DECIMAL(19, 4) = NULL, 
:040_4 DECIMAL(19, 4) = NULL, 
:040_5 DECIMAL(19, 4) = NULL, 
:040_6 DECIMAL(19, 4) = NULL, 
:040_7 DECIMAL(19, 4) = NULL, 
:040_8 DECIMAL(19, 4) = NULL, 
:040_9 DECIMAL(19, 4) = NULL, 
:041_1 DECIMAL(19, 4) = NULL, 
:041_2 DECIMAL(19, 4) = NULL, 
:041_3 DECIMAL(19, 4) = NULL, 
:041_4 DECIMAL(19, 4) = NULL, 
:041_5 DECIMAL(19, 4) = NULL, 
:041_6 DECIMAL(19, 4) = NULL, 
:041_7 DECIMAL(19, 4) = NULL, 
:041_8 DECIMAL(19, 4) = NULL, 
:041_9 DECIMAL(19, 4) = NULL, 
:042_1 DECIMAL(19, 4) = NULL, 
:042_2 DECIMAL(19, 4) = NULL, 
:042_3 DECIMAL(19, 4) = NULL, 
:042_4 DECIMAL(19, 4) = NULL, 
:042_5 DECIMAL(19, 4) = NULL, 
:042_6 DECIMAL(19, 4) = NULL, 
:042_7 DECIMAL(19, 4) = NULL, 
:042_8 DECIMAL(19, 4) = NULL, 
:042_9 DECIMAL(19, 4) = NULL, 
:043_1 DECIMAL(19, 4) = NULL, 
:043_2 DECIMAL(19, 4) = NULL, 
:043_3 DECIMAL(19, 4) = NULL, 
:043_4 DECIMAL(19, 4) = NULL, 
:043_5 DECIMAL(19, 4) = NULL, 
:043_6 DECIMAL(19, 4) = NULL, 
:043_7 DECIMAL(19, 4) = NULL, 
:043_8 DECIMAL(19, 4) = NULL, 
:043_9 DECIMAL(19, 4) = NULL, 
:044_1 DECIMAL(19, 4) = NULL, 
:044_2 DECIMAL(19, 4) = NULL, 
:044_3 DECIMAL(19, 4) = NULL, 
:044_4 DECIMAL(19, 4) = NULL, 
:044_5 DECIMAL(19, 4) = NULL, 
:044_6 DECIMAL(19, 4) = NULL, 
:044_7 DECIMAL(19, 4) = NULL, 
:044_8 DECIMAL(19, 4) = NULL, 
:044_9 DECIMAL(19, 4) = NULL, 
:045_1 DECIMAL(19, 4) = NULL, 
:045_2 DECIMAL(19, 4) = NULL, 
:045_3 DECIMAL(19, 4) = NULL, 
:045_4 DECIMAL(19, 4) = NULL, 
:045_5 DECIMAL(19, 4) = NULL, 
:045_6 DECIMAL(19, 4) = NULL, 
:045_7 DECIMAL(19, 4) = NULL, 
:045_8 DECIMAL(19, 4) = NULL, 
:045_9 DECIMAL(19, 4) = NULL, 
:046_1 DECIMAL(19, 4) = NULL, 
:046_2 DECIMAL(19, 4) = NULL, 
:046_3 DECIMAL(19, 4) = NULL, 
:046_4 DECIMAL(19, 4) = NULL, 
:046_5 DECIMAL(19, 4) = NULL, 
:046_6 DECIMAL(19, 4) = NULL, 
:046_7 DECIMAL(19, 4) = NULL, 
:046_8 DECIMAL(19, 4) = NULL, 
:046_9 DECIMAL(19, 4) = NULL, 
:047_1 DECIMAL(19, 4) = NULL, 
:047_2 DECIMAL(19, 4) = NULL, 
:047_3 DECIMAL(19, 4) = NULL, 
:047_4 DECIMAL(19, 4) = NULL, 
:047_5 DECIMAL(19, 4) = NULL, 
:047_6 DECIMAL(19, 4) = NULL, 
:047_7 DECIMAL(19, 4) = NULL, 
:047_8 DECIMAL(19, 4) = NULL, 
:047_9 DECIMAL(19, 4) = NULL, 
:048_1 DECIMAL(19, 4) = NULL, 
:048_2 DECIMAL(19, 4) = NULL, 
:048_3 DECIMAL(19, 4) = NULL, 
:048_4 DECIMAL(19, 4) = NULL, 
:048_5 DECIMAL(19, 4) = NULL, 
:048_6 DECIMAL(19, 4) = NULL, 
:048_7 DECIMAL(19, 4) = NULL, 
:048_8 DECIMAL(19, 4) = NULL, 
:048_9 DECIMAL(19, 4) = NULL, 
:049_1 DECIMAL(19, 4) = NULL, 
:049_2 DECIMAL(19, 4) = NULL, 
:049_3 DECIMAL(19, 4) = NULL, 
:049_4 DECIMAL(19, 4) = NULL, 
:049_5 DECIMAL(19, 4) = NULL, 
:049_6 DECIMAL(19, 4) = NULL, 
:049_7 DECIMAL(19, 4) = NULL, 
:049_8 DECIMAL(19, 4) = NULL, 
:049_9 DECIMAL(19, 4) = NULL 
) 
AS 
INSERT INTO tblSimulation (p, cfYear, cfLocation, [Delta], Design, SigmaLoc, 
           Sigma, SampleSize, Intercept) 
SELECT DT1.p, DT1.cfYear, DT1.cfLocation, 
     DT1.Delta, DT1.Design, DT1.SigmaLoc, 
     DT1.Sigma, DT1.SampleSize, DT1.Intercept 
    FROM (
     SELECT :001_1 AS p, :001_2 AS cfYear, :001_3 AS cfLocation, 
       :001_4 AS Delta, :001_5 AS Design, :001_6 AS SigmaLoc, 
       :001_7 AS Sigma, :001_8 AS SampleSize, :001_9 AS Intercept 
      FROM OneRowTable 
     UNION ALL 
     SELECT :002_1, :002_2, :002_3, 
       :002_4, :002_5, :002_6, 
       :002_7, :002_8, :002_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :003_1, :003_2, :003_3, 
       :003_4, :003_5, :003_6, 
       :003_7, :003_8, :003_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :004_1, :004_2, :004_3, 
       :004_4, :004_5, :004_6, 
       :004_7, :004_8, :004_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :005_1, :005_2, :005_3, 
       :005_4, :005_5, :005_6, 
       :005_7, :005_8, :005_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :006_1, :006_2, :006_3, 
       :006_4, :006_5, :006_6, 
       :006_7, :006_8, :006_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :007_1, :007_2, :007_3, 
       :007_4, :007_5, :007_6, 
       :007_7, :007_8, :007_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :008_1, :008_2, :008_3, 
       :008_4, :008_5, :008_6, 
       :008_7, :008_8, :008_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :009_1, :009_2, :009_3, 
       :009_4, :009_5, :009_6, 
       :009_7, :009_8, :009_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :010_1, :010_2, :010_3, 
       :010_4, :010_5, :010_6, 
       :010_7, :010_8, :010_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :011_1, :011_2, :011_3, 
       :011_4, :011_5, :011_6, 
       :011_7, :011_8, :011_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :012_1, :012_2, :012_3, 
       :012_4, :012_5, :012_6, 
       :012_7, :012_8, :012_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :013_1, :013_2, :013_3, 
       :013_4, :013_5, :013_6, 
       :013_7, :013_8, :013_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :014_1, :014_2, :014_3, 
       :014_4, :014_5, :014_6, 
       :014_7, :014_8, :014_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :015_1, :015_2, :015_3, 
       :015_4, :015_5, :015_6, 
       :015_7, :015_8, :015_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :016_1, :016_2, :016_3, 
       :016_4, :016_5, :016_6, 
       :016_7, :016_8, :016_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :017_1, :017_2, :017_3, 
       :017_4, :017_5, :017_6, 
       :017_7, :017_8, :017_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :018_1, :018_2, :018_3, 
       :018_4, :018_5, :018_6, 
       :018_7, :018_8, :018_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :019_1, :019_2, :019_3, 
       :019_4, :019_5, :019_6, 
       :019_7, :019_8, :019_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :020_1, :020_2, :020_3, 
       :020_4, :020_5, :020_6, 
       :020_7, :020_8, :020_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :021_1, :021_2, :021_3, 
       :021_4, :021_5, :021_6, 
       :021_7, :021_8, :021_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :022_1, :022_2, :022_3, 
       :022_4, :022_5, :022_6, 
       :022_7, :022_8, :022_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :023_1, :023_2, :023_3, 
       :023_4, :023_5, :023_6, 
       :023_7, :023_8, :023_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :024_1, :024_2, :024_3, 
       :024_4, :024_5, :024_6, 
       :024_7, :024_8, :024_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :025_1, :025_2, :025_3, 
       :025_4, :025_5, :025_6, 
       :025_7, :025_8, :025_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :026_1, :026_2, :026_3, 
       :026_4, :026_5, :026_6, 
       :026_7, :026_8, :026_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :027_1, :027_2, :027_3, 
       :027_4, :027_5, :027_6, 
       :027_7, :027_8, :027_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :028_1, :028_2, :028_3, 
       :028_4, :028_5, :028_6, 
       :028_7, :028_8, :028_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :029_1, :029_2, :029_3, 
       :029_4, :029_5, :029_6, 
       :029_7, :029_8, :029_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :030_1, :030_2, :030_3, 
       :030_4, :030_5, :030_6, 
       :030_7, :030_8, :030_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :031_1, :031_2, :031_3, 
       :031_4, :031_5, :031_6, 
       :031_7, :031_8, :031_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :032_1, :032_2, :032_3, 
       :032_4, :032_5, :032_6, 
       :032_7, :032_8, :032_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :033_1, :033_2, :033_3, 
       :033_4, :033_5, :033_6, 
       :033_7, :033_8, :033_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :034_1, :034_2, :034_3, 
       :034_4, :034_5, :034_6, 
       :034_7, :034_8, :034_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :035_1, :035_2, :035_3, 
       :035_4, :035_5, :035_6, 
       :035_7, :035_8, :035_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :036_1, :036_2, :036_3, 
       :036_4, :036_5, :036_6, 
       :036_7, :036_8, :036_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :037_1, :037_2, :037_3, 
       :037_4, :037_5, :037_6, 
       :037_7, :037_8, :037_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :038_1, :038_2, :038_3, 
       :038_4, :038_5, :038_6, 
       :038_7, :038_8, :038_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :039_1, :039_2, :039_3, 
       :039_4, :039_5, :039_6, 
       :039_7, :039_8, :039_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :040_1, :040_2, :040_3, 
       :040_4, :040_5, :040_6, 
       :040_7, :040_8, :040_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :041_1, :041_2, :041_3, 
       :041_4, :041_5, :041_6, 
       :041_7, :041_8, :041_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :042_1, :042_2, :042_3, 
       :042_4, :042_5, :042_6, 
       :042_7, :042_8, :042_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :043_1, :043_2, :043_3, 
       :043_4, :043_5, :043_6, 
       :043_7, :043_8, :043_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :044_1, :044_2, :044_3, 
       :044_4, :044_5, :044_6, 
       :044_7, :044_8, :044_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :045_1, :045_2, :045_3, 
       :045_4, :045_5, :045_6, 
       :045_7, :045_8, :045_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :046_1, :046_2, :046_3, 
       :046_4, :046_5, :046_6, 
       :046_7, :046_8, :046_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :047_1, :047_2, :047_3, 
       :047_4, :047_5, :047_6, 
       :047_7, :047_8, :047_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :048_1, :048_2, :048_3, 
       :048_4, :048_5, :048_6, 
       :048_7, :048_8, :048_9 
      FROM OneRowTable 
     UNION ALL 
     SELECT :049_1, :049_2, :049_3, 
       :049_4, :049_5, :049_6, 
       :049_7, :049_8, :049_9 
      FROM OneRowTable 
     ) AS DT1 
     WHERE NOT (
        DT1.p IS NULL 
        AND DT1.cfYear IS NULL 
        AND DT1.cfLocation IS NULL 
        AND DT1.Delta IS NULL 
        AND DT1.Design IS NULL 
        AND DT1.SigmaLoc IS NULL 
        AND DT1.Sigma IS NULL 
        AND DT1.SampleSize IS NULL 
        AND DT1.Intercept IS NULL 
       ) 
; 

Utilisation:

EXECUTE Add100Simulations 
      1, 0, 0, 0, 0, 0, 0, 0, 0, 
      2, 0, 0, 0, 0, 0, 0, 0, 0, 
      3, 0, 0, 0, 0, 0, 0, 0, 0, 
      4, 0, 0, 0, 0, 0, 0, 0, 0, 
      5, 0, 0, 0, 0, 0, 0, 0, 0, 
      6, 0, 0, 0, 0, 0, 0, 0, 0, 
      7, 0, 0, 0, 0, 0, 0, 0, 0, 
      8, 0, 0, 0, 0, 0, 0, 0, 0, 
      9, 0, 0, 0, 0, 0, 0, 0, 0, 
      10, 0, 0, 0, 0, 0, 0, 0, 0, 
      11, 0, 0, 0, 0, 0, 0, 0, 0, 
      12, 0, 0, 0, 0, 0, 0, 0, 0, 
      13, 0, 0, 0, 0, 0, 0, 0, 0, 
      14, 0, 0, 0, 0, 0, 0, 0, 0, 
      15, 0, 0, 0, 0, 0, 0, 0, 0, 
      16, 0, 0, 0, 0, 0, 0, 0, 0, 
      17, 0, 0, 0, 0, 0, 0, 0, 0, 
      18, 0, 0, 0, 0, 0, 0, 0, 0, 
      19, 0, 0, 0, 0, 0, 0, 0, 0, 
      20, 0, 0, 0, 0, 0, 0, 0, 0, 
      21, 0, 0, 0, 0, 0, 0, 0, 0, 
      22, 0, 0, 0, 0, 0, 0, 0, 0, 
      23, 0, 0, 0, 0, 0, 0, 0, 0, 
      24, 0, 0, 0, 0, 0, 0, 0, 0, 
      25, 0, 0, 0, 0, 0, 0, 0, 0, 
      26, 0, 0, 0, 0, 0, 0, 0, 0, 
      27, 0, 0, 0, 0, 0, 0, 0, 0, 
      28, 0, 0, 0, 0, 0, 0, 0, 0, 
      29, 0, 0, 0, 0, 0, 0, 0, 0, 
      30, 0, 0, 0, 0, 0, 0, 0, 0, 
      31, 0, 0, 0, 0, 0, 0, 0, 0, 
      32, 0, 0, 0, 0, 0, 0, 0, 0, 
      33, 0, 0, 0, 0, 0, 0, 0, 0, 
      34, 0, 0, 0, 0, 0, 0, 0, 0, 
      35, 0, 0, 0, 0, 0, 0, 0, 0, 
      36, 0, 0, 0, 0, 0, 0, 0, 0, 
      37, 0, 0, 0, 0, 0 

note ci-dessus est ANSI-92 syntaxe mode de requête (voir http://office.microsoft.co

+0

Apprenez quelque chose de nouveau chaque jour. J'ai supprimé mon commentaire pour dire que c'est impossible: à quoi ressemble la performance (par rapport à plusieurs insertions dans une seule transaction)? Pity Access force un tel hack à le faire ... – mavnn

3

Votre requête devrait ressembler à ceci

insert into aaa (col1, col2) 
select * from (select 'yourdatarow1col1' as col1 , 'yourdatarow1col2' as col2 from ddd 
union all 
select 'yourdatarow2col1' as col1, 'yourdatarow1col2' as col2 from ddd) as tmp 

aaa: Votre table cible en matière d'accès

ddd: créer une table d'accès db avec une Colum et doit avoir une rangée, doesn 't pas mater quelles données.

alias: Tous les alias doivent avoir le même nom et l'ordre a table cible

fonctionne espoir pour vous, ma chute de processus de 15 minutes à 1,30 minutes

Bye Gus

+0

Les alias ne comptent pas dans les instructions SELECT successives dans UNION. Seuls les alias de la première instruction SELECT importent, et seulement pour une instruction SELECT basée sur UNION. –

+0

Ne devrait-il pas être un normal au lieu d'un UNION ALL? – mYnDstrEAm

0
Public Sub Insert_tb_TABLE_DATA_TABLE(ByVal arg_Data_Table As DataTable, Optional ByVal arg_Conn_Open As Boolean = False) 
    Try 

     If arg_Data_Table.Rows.Count = 0 Then 
      Return 
     End If 

     If Not arg_Conn_Open Then 
      _Connection_Access = New OleDbConnection(My.Settings.db_GENESIS_ACCESS) 
      _Connection_Access.Open() 
     End If 

     Dim query As String = String.Empty 

     query = String.Concat("INSERT INTO <TABLE> (<Field1>, <Field2>, <Field3>,<Field4>) SELECT * FROM (", _ 
                 " SELECT ", arg_Data_Table.Rows(0)("Field1"), " AS Field1, '", _ 
                    arg_Data_Table.Rows(0)("Field2"), "' as Field2,", "'", _ 
                    arg_Data_Table.Rows(0)("Field3"), "' as Field3, '", _ 
                    arg_Data_Table.Rows(0)("Field4"), "' as Field4 FROM tb_REFERENCE") 
     Dim lc_Count As Integer = 0 

     For i As Integer = 1 To arg_Data_Table.Rows.Count - 1 

      If lc_Count = 45 Then 
       query += ") AS TMP" 

       _Command_Access = New OleDbCommand(query, _Connection_Access) 
       _Command_Access.ExecuteNonQuery() 
       _Command_Access.Dispose() 

       query = String.Concat("INSERT INTO TABLE (<Field1>, <Field2>, <Field3>,<Field4>) SELECT * FROM (", _ 
                 " SELECT ", arg_Data_Table.Rows(i)("Field1"), " AS Field1, '", _ 
                    arg_Data_Table.Rows(i)("Field2"), "' as Field2,", "'", _ 
                    arg_Data_Table.Rows(i)("Field3"), "' as Field3, '", _ 
                    arg_Data_Table.Rows(i)("Field4"), "' as Field4 FROM tb_REFERENCE ") 
       lc_Count = -1 
      Else : query += String.Concat(" UNION ALL SELECT ", arg_Data_Table.Rows(i)("Field1"), ", '", _ 
                   arg_Data_Table.Rows(i)("Field2"), "',", "'", _ 
                   arg_Data_Table.Rows(i)("Field3"), "', '", _ 
                   arg_Data_Table.Rows(i)("Field"), "' FROM tb_REFERENCE ") 

      End If 
      lc_Count += 1 

     Next 

     query += ") AS TMP" 

     _Command_Access = New OleDbCommand(query, _Connection_Access) 
     _Command_Access.ExecuteNonQuery() 
     _Command_Access.Dispose() 

     If Not arg_Conn_Open Then _Connection_Access.Close() 
    Catch ex As Exception 
     MessageBox.Show(String.Concat("ERROR: ", ex.Message), "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) 
    Finally 
     GC.Collect() 
     GC.WaitForPendingFinalizers() 
    End Try 
End Sub 
+0

tb_REFERENCE est une table qui a déjà au moins une ligne insérée. Le numéro 45 est utilisé car l'accès n'accepte que 49 UNION ALL par standard. J'ai utilisé 45 pour m'assurer que ça marchera quand même. –

Questions connexes