2008-12-04 5 views
0

Ce codel'exportation d'un onglet fichier délimité à partir d'une base de données d'accès

db = "C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\Neuer Ordner\baywotch.db5" 
TextExportFile = "C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\Neuer Ordner\Exp.txt" 

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

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

strSQL = "SELECT * FROM tblAuction1" 

rs.Open strSQL, cn, 3, 3 

Set fs = CreateObject("Scripting.FileSystemObject") 

Set f = fs.CreateTextFile(TextExportFile, True, True) 

a = rs.GetString 

f.WriteLine a 

f.Close 

génère un fichier délimité par des tabulations, mais il ne convient pas à importer dans mysql. Je voudrais de générer un fichier similaire à un fichier produit par une macro d'accès, qui peut être vu ici:

http://www.yousendit.com/download/TTZtWmdsT01kMnVGa1E9PQ

Le fichier produit par le vbscript est ici:

http://www.yousendit.com/download/TTZtWmdsT00wVWtLSkE9PQ

Je voudrais également savoir pourquoi les tailles de fichiers diffèrent de 50k ou plus.

edit: Le résultat du fichier vbscript utilise des caractères de nouvelle ligne qui ne sont pas reconnus par le bloc-notes, donc ce qui précède semble beaucoup plus désordonné lors de l'affichage. La macro ne semble pas exporter le code html, ce qui explique pourquoi il s'agit d'un fichier plus petit, mais le vbscript ne semble pas être délimité par des tabulations, car il ne sera pas importé dans mysql.

éditer: les fichiers semblent corrects sous un système Linux, donc ça pourrait être quelque chose à voir avec la gestion des fenêtres ... mais ce n'est toujours pas correct.

+0

Si le premier, pourquoi utiliser ADO pour le codage des données Jet, quand DAO est l'interface de données natives de Jet? Et si ce n'est pas Access que vous programmez, alors vous n'utilisez pas Access mais seulement Jet. Les distinctions comptent pour les réponses utilisables. –

+0

J'utilise Access en tant que banque de données. J'utilise ADO parce que c'est le conseil qu'on m'a donné d'utiliser, dans une question précédente. –

Répondre

0

Les deux fichiers contiennent à la fois des données délimitées par des tabulations et du code HTML (généré par certaines applications MS Office). TblAuction1 stocke-t-il des objets OLE? Peut-être que lorsque vous exportez ces objets, il exporte le contenu du fichier?

+0

le code html est récupéré à partir des sites Web d'enchères eBay par un autre programme. il n'y a pas d'obejects ole autant que je sache. au moins sur mon système Windows XP, et selon VBScript, le fichier généré par vbscript n'est pas délimité par des tabulations de la même manière que l'accès est. –

+0

Savez-vous quelque chose d'autre qu'il pourrait être? –

+0

Vous pourriez rencontrer des problèmes de texte HTML avec des onglets intégrés; le programme d'importation interprétera cela comme le début d'un nouveau champ. –

0

Cela ressemble à un problème d'encodage. Je vois que vous passez le paramètre Unicode lorsque vous créez le fichier texte, mais il y a clairement une différence d'encodage entre les deux fichiers.

+0

Est-ce vraiment le problème? La macro d'accès exporte aussi unicode ... donc ça ne devrait pas poser de problème .. –

+0

Bon je ne peux pas dire que c'est définitivement * le * problème, mais quand je regarde les fichiers ils sont définitivement * pas * encodés même. – EBGreen

0

Quel est l'objectif de ce projet? Quel est le but de la création du fichier? Si vous êtes à la recherche de transférer les données d'accès à MySQL, pourquoi ne pas le faire directement avec quelque chose comme ça


Const Access = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\Dokumente und Einstellungen\hom\Anwendungsdaten\BayWotch4\Neuer Ordner\baywotch.db5" 
Const SQLServer = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=.\SQLEXPRESS" 
Dim arrFields 

Set SQLConn = CreateObject("ADODB.Connection") 
WITH SQLConn 
    .ConnectionString = SQLServer 
    .Open 
End WITH 
Set AccessConn = CreateObject("ADODB.Connection") 
WITH AccessConn 
    .ConnectionString = Access 
    .Open 
End WITH 
Set SQLRS = CreateObject("ADODB.Recordset") 
WITH SQLRS 
    .CursorType = 3 
    .LockType = 3 
End WITH 
Set AccessRS = CreateObject("ADODB.Recordset") 
WITH AccessRS 
    .ActiveConnection = AccessConn 
    .CursorType = 3 
    .LockType = 3 
End WITH 

strSQL = "SELECT * FROM tblAuction1" 
AccessRS.Open strSQL 

If AccessRS.RecordCount <> 0 Then 
    AccessRS.MoveFirst 
    ReDim arrFields(AccessRS.Fields.Count) 
    Do Until AccessRS.BOF OR AccessRS.EOF 
     For i = 0 To AccessRS.Fields.Count - 1 
      If AccessRS.Fields(i).Type = 202 Then 
       arrFields(i) = Chr(39) & AccessRS.Fields(i).Value & Chr(39) 
      Else 
       arrFields(i) = AccessRS.Fields(i).Value 
      End If 
     Next 
     strSQL1 = "INSERT INTO {Table in mySQL} VALUES(" 
     For j = 1 To UBound(arrFields) - 2 
      strSQL1 = strSQL1 & arrFields(j) & "," 
     Next 
     strSQL1 = strSQL1 & arrFields(UBound(arrFields) - 1) & ")" 
     SQLRS = SQLConn.Execute(strSQL1) 
     AccessRS.MoveNext 
    Loop 
Else 
    MsgBox "No records found" 
End If 

Cela va ajouter tous les enregistrements renvoyés par le jeu d'enregistrements à une table dans une base de données SQLExpress, il devrait ne pas être difficile à adapter à vos besoins (si vos besoins transfèrent des données d'une base de données à une autre). Utilisez-vous Access en tant qu'environnement de programmation ou simplement en tant que magasin de données?

+0

Est-ce une meilleure approche que l'importation après l'exportation dans un fichier texte? –

+0

Si cela fonctionne pourquoi pas? Pourquoi déplacer les données deux fois quand vous pouvez le déplacer une fois, les intermédiaires augmentent toujours le coût et retardent la livraison. – Tester101

+0

Je seconde tester101.myopenid.com. Moins de pièces mobiles est (pour la plupart) toujours bonne. –

Questions connexes