[VBScript] Recordset Access et champ de type Mémo

Recordset Access et champ de type Mémo [VBScript] - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 14-10-2005 à 11:29:41   

Reply

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 :
  1. Const CHUNK_SIZE As Long = 100
  2.     Dim lOffset As Long
  3.     Dim sChunk As String
  4.     Dim lFieldSize As Long
  5.     Dim sResult as String
  6.     rs.Open sSqlRequest, ADOConnection, adOpenKeyset, adLockReadOnly, adCmdText
  7.     sResult = ""
  8.     If Not rs.EOF Then
  9.         lOffset = 0
  10.         lFieldSize = rs(sFieldName).ActualSize
  11.         While lOffset < lFieldSize
  12.             sChunk = rs(sFieldName).GetChunk(CHUNK_SIZE)
  13.             sResult = sResult & sChunk
  14.             lOffset = lOffset + CHUNK_SIZE
  15.         Wend
  16.     End If


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 27-10-2005 à 13:54:50    

Comment ça marche ???


---------------
Michèle
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed