Recordset Access et champ de type Mémo [VBScript] - VB/VBA/VBS - Programmation
Marsh Posté le 14-10-2005 à 12:06:04
les champs de type memo on un fonctionnement particulier (et assez chaint à utiliser, il faut le dire).
voilà la procedure à suivre (c'est du VB6 mais ça s'adapte sans problème):
Code :
|
Marsh Posté le 14-10-2005 à 11:29:41
Bonjour,
J'ai un souci avec un VBScript
dans mon script, avec une connexion à ma base Access, je récupère un recordset d"une table.
cette table comporte un champ de type Memo --> problème : je n'arrive pas à récupérer les données de ce champ.
Voici les scripts en question :
Quand un champ du recordset est de type Mémo, je n'arrive pas à récupérer ses données.
Le rst.fields(idxFld qui va bien) est égal à vide.
Voila si ca peut vous aider à me donner un début de solution.
Merci.
Script qui récupère des données d'une base Access pour écrire dans une base SQL Server :
--- Install.wsf ---
<!-- <?XML versio="1.0" standalone="yes" ?> -->
<package>
<job id="export"><?job debug="true" ?>
<runtime>
<description>Export de données vers SQL Server</description>
<example>Exemple : Install.wsf //job:export</example>
<usage></usage>
</runtime>
<script language="VBScript" src="parametrage.vbs"/>
<script language="VBScript" src="export.vbs"/>
<script language="VBScript">
WScript.Echo "Fin de l'exportation."
WScript.Quit
</script>
</job>
</package>
--- parametrage.vbs ---
Const strTOOL_NAME = "RIP" ' Nom de l'outil
Const cnnStringSQLServer = "driver={SQL Server};server=GO-9J2451J;uid=RIPadmin;password=RIPadmin;database=RIP"
Const cnnStringAccess = "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Documents and Settings\Mon nom\Mes documents\GS\RIP\var\data\RIP_STA.mdb"
--- export.vbs ---
Dim cnnAccess
Dim cnnSQLServer
Set cnnSQLServer = CreateObject("ADODB.Connection" )
cnnSQLServer.ConnectionString = cnnStringSQLServer
cnnSQLServer.Open
Set cnnAccess = CreateObject("ADODB.Connection" )
cnnAccess.ConnectionString = cnnStringAccess
cnnAccess.Open
Dim rst
Dim nbFld
Dim idxFld
Dim strColonne
Dim cmd
Dim insQuery
Dim datYear
Dim datMonth
Dim datDay
Dim datHour
Dim datMinute
Dim datSecond
set rst = CreateObject("ADODB.Recordset" )
set cmd = CreateObject("ADODB.Command" )
' Ouverture du Recordset
rst.Open "SELECT * FROM EVENEMENTS", cnnAccess
rst.movefirst
While Not rst.Eof
nbFld = rst.fields.count
strColonne = ""
for idxFld = 0 to nbFld - 1
if idxFld = 0 then
strColonne = rst.fields(idxFld).name
else
strColonne = strColonne & ", " & rst.fields(idxFld).name
end if
next
rst.movefirst
while not rst.eof
insQuery = ""
insQuery = "INSERT INTO EVENEMENTS (" & strColonne & " ) values ("
for idxFld = 0 to nbFld - 1
if idxFld = 0 then
select case rst.fields(idxFld).type
case 202
insQuery = insQuery & "'" & sqlChaine(rst.fields(idxFld)) & "'"
end select
else
select case rst.fields(idxFld).type
case 202
insQuery = insQuery & ", '" & sqlChaine(rst.fields(idxFld)) & "'"
case 135
if rst.fields(idxFld).name = "INS_DATE" or rst.fields(idxFld).name = "DEL_DATE" then
datYear = Year(rst.fields(idxFld))
datMonth = Month(rst.fields(idxFld))
if datMonth < 10 then datMonth = "0" & datMonth
datDay = Day(rst.fields(idxFld))
if datDay < 10 then datDay = "0" & datDay
datHour = Hour(rst.fields(idxFld))
if datHour < 10 then datHour = "0" & datHour
datMinute = Minute(rst.fields(idxFld))
if datMinute < 10 then datMinute = "0" & datMinute
datSecond = Second(rst.fields(idxFld))
if datSecond < 10 then datSecond = "0" & datSecond
insQuery = insQuery & ", '" & datYear & datMonth & datDay & " " & datHour & ":" & datMinute & ":" & datSecond & "'"
else
datYear = Year(rst.fields(idxFld))
datMonth = Month(rst.fields(idxFld))
if datMonth < 10 then datMonth = "0" & datMonth
datDay = Day(rst.fields(idxFld))
if datDay < 10 then datDay = "0" & datDay
insQuery = insQuery & ", '" & datYear & datMonth & datDay & "'"
end if
case 11
if rst.fields(idxFld) = "Vrai" then
insQuery = insQuery & ", 1"
else
insQuery = insQuery & ", 0"
end if
case 3
insQuery = insQuery & ", " & rst.fields(idxFld)
end select
end if
next
insQuery = insQuery & " )"
cmd.ActiveConnection = cnnSQLServer
cmd.CommandText = insQuery
cmd.Execute
rst.movenext
wend
' Fermeture du Recordset
rst.Close
set rst = Nothing
cnnAccess.Close
cnnSQLServer.Close
Set cnnSQLServer = Nothing
Set cnnAccess = Nothing
Function sqlChaine(strChaine)
Dim strStart
Dim strEnd
'
sqlChaine = ""
' Doubler les apostrophes (simples quotes)
strStart = 0
Do
strEnd = InStr(strStart + 1, strChaine, "'", vbTextCompare)
If IsNull(strEnd) Then Exit Do
If strEnd = 0 Then
sqlChaine = sqlChaine & Right(strChaine, Len(strChaine) - strStart)
Exit Do
End If
sqlChaine = sqlChaine & Mid(strChaine, strStart + 1, strEnd - strStart) & "'"
strStart = strEnd
Loop
End Function
rst.fields(idxFld).type de valeur 203 pour un champ de type Memo mais rst.fields(idxFld) est désespéremment vide alors qu'il y a plein de valeurs dans ma base
comment faire ?
---------------
Michèle