cs_tommie
Messages postés40Date d'inscriptionjeudi 18 mars 2004StatutMembreDernière intervention11 octobre 2005
-
16 mars 2005 à 09:24
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 2010
-
24 mars 2005 à 17:13
bonjour tout le monde, j'ai un probleme avec une connexion a une base de données
en fait j'ai trouvé un morceau de code qui me permet a partir d'un fichier excel d'extraire les données qui sont dedans afin d'alimenter une base de donées oracle
le probleme que j'ai c'est que ca fonctionne parfaitement avec une base de données oracle en local mais quand je veux attauqer celle qui se trouve sur un serveur je n'y arrive pas
pourriez vous m'aider a corriger mon code ou a me donner une astuce afin d'y arriver
merci de votre aide a tous
je vous joins mon code ainsi que l'erreur qu'y s'affiche (la ligne d'erreur est en rose)
SQL = "SELECT * from salarie"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn2
rs.movefirst
do while rs("Mat") <> ""
response.Write(rs("matricule")&" | "&rs("nom")& "
")req_verif "Select * from test where matricule " & rs("matricule")
Set rs_verif = Server.CreateObject("ADODB.Recordset")
rs_verif.Open req_verif, connif (rs_verif.EOF True AND rs_verif.BOF True) then
req_insert = "INSERT INTO test(matricule,nom) values(" & rs("matricule") & ", "& rs("nom") & ")"
Set rs_insert = Server.CreateObject("ADODB.Recordset")
rs_insert.Open req_insert, conn
end if
rs.movenext
Loop
rs.close
set rs=nothing
conn2.close
set conn2=nothing
%>
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
cs_tommie
Messages postés40Date d'inscriptionjeudi 18 mars 2004StatutMembreDernière intervention11 octobre 2005 18 mars 2005 à 08:51
salut en fait toute ma connexion se fait dans un fichier global.asa ou je met tout ca dedans:
<SCRIPT LANGUAGE="VBSCRIPT" RUNAT="SERVER">
sub Application_OnStart
Application.Value("dateOuverture")=now()
on error resume next
MM_db_bilmat_STRING = "Provider=MSDAORA;Data Source=INTRANET;USER ID=SPADMIN;PASSWORD=SPADMIN;"
set Application("connexion") = Server.CreateObject("ADODB.Connection")
Application.Value("connexion").Open MM_db_bilmat_STRING
if err <> 0 then
response.write(err.description)
response.end
end if
set conn=Application.value("connexion")
if err <> 0 then
response.write(err.description)
response.end
end if
end sub
sub Application_OnEnd
set conn=Application.value("connexion")
Application.Value("connexion").Close
set Application.value("connexion")=nothing
end sub
sub Session_OnStart
Session.timeout=60
end sub
sub Session_OnEnd
set conn=Application("connexion")
end sub
</script>
et j'appelle ma connexion dans ma page avec ceci:
set conn=Application("connexion")
et je ne comprends pas pourquoi ca ne fonctionne pas
par contre j'aimerais savoir egalement si tu saurais comment passer de .xls en .csv ???
changer dans ma page asp que ce soit du csv et non plus du xls car j'ai essayé de modifier mon fichier mais ca me ressort des erreurs
merci de ton aide
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 18 mars 2005 à 23:53
En fait, c'est peut-être simplement que :
1/ le fichier est-il bien uploadé sur le serveur ?
2/ as-tu les drivers Excel installés sur le serveur qui permettent de te connecter à excel (Microsoft Excel Driver )?
Pourquoi veux-tu convertir ton fichier xls en csv ? Ca fonctionne relativement bien avec Excel non ?
En ce qui me concerne, si c'est toi qui fait l'upload, je te conseille de convertir ton fichier xls en csv avant de l'uploader.
Ensuite tu ouvres ton fichier avec filesystem (comme un fichier text), tu le lis ligne par ligne et tu insert dans Oracle (t'as beaucoup de données ? car tu peux également uploader le pl/sql directement).
Autrement c'est la grosse galère. Il faut créer un objet Excel, lancer l'application (côté serveur), ouvrir ton fichier sur le serveur, et convertir dans oublier de killer excel (et là tu risque d'avoir pas mal de problèmes).
Donc question:
Driver Excel ok ? (as-tu excel sur le serveur en gros)
C'est toi qui fait l'upload (-> utlisateur avancé)
Réponse:
Conversion xls -> csv sur le serveur ... vraiment à éviter.
yopyop
cs_tommie
Messages postés40Date d'inscriptionjeudi 18 mars 2004StatutMembreDernière intervention11 octobre 2005 21 mars 2005 à 10:17
salut,
donc en fait c'est bien ce que tu me disais c'est que excel n'est aps installé sur le serveur je me suis renseigné
et en fait le soucis qu'il y a c'est qu'ils veulent que je fasse ca avec des fichiers csv car ils ne veulent pas mettre excel sur le serveur a cause des licences a payer pour ca
donc je voudrais savoir si tu saurais comment faire pour faire la meme chose avec un fichier csv??
je te rejoins mon code que j'ai pour du xls et dis moi si tu vois comment le modifier pour prendre en compte le csv
merci de ton aide
<%
set conn=Application("connexion")
Set Conn2 = Server.CreateObject("ADODB.Connection")
str = "Driver={Microsoft Excel Driver (*.xls)}; DBQ=" & Server.MapPath(".") &"\test.xls"
Conn2.Open str
SQL = "SELECT * from salarie"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn2
rs.movefirst
do while rs("Mat") <> ""
response.Write(rs("matricule")&" | "&rs("nom")& "
")req_verif "Select * from test where matricule " & rs("matricule")
Set rs_verif = Server.CreateObject("ADODB.Recordset")
rs_verif.Open req_verif, connif (rs_verif.EOF True AND rs_verif.BOF True) then
req_insert = "INSERT INTO test(matricule,nom) values(" & rs("matricule") & ", "& rs("nom") & ")"
Set rs_insert = Server.CreateObject("ADODB.Recordset")
rs_insert.Open req_insert, conn
end if
rs.movenext
Loop
rs.close
set rs=nothing
conn2.close
set conn2=nothing
%>
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 21 mars 2005 à 19:28
Salut,
J'en ai parlé un peu plus haut:
tu ouvres ton fichier avec filesystem (comme un fichier text), tu le lis ligne par ligne et tu insert dans Oracle (t'as beaucoup de données ? car tu peux également uploader le pl/sql directement).
Pour chaque ligne tu fais un split
MonSeparateur = "++++" <- il faut utiliser une string que tu es sûr de ne pas utiliser dans tes valeurs
MaLigne = f.ReadLine (cf a)
MonTableau = Split(MaLigne, MonSeparateur)
Ensuite tu peux accéder au tableau :
MonTableau (0) = "Nom"
MonTableau (1) = "Prenom"
MonTableau (2) = "Email"
cs_tommie
Messages postés40Date d'inscriptionjeudi 18 mars 2004StatutMembreDernière intervention11 octobre 2005 22 mars 2005 à 14:45
je te remercie deja pour tout ce que tu fais mais en fait j'ai beaucoup de mal a m'en sortir donc effectivement un exemple détaillé de tes archives m'aiderait beaucoup!!
merci
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 23 mars 2005 à 20:33
voilà,
j'espère que ca joue pour toi....
yopyop
=========================================
dim sExelFilePath 'Holds the file name & path
dim bExisting 'true if file found on server
dim oFile
dim oRS
dim sSplitValue 'Chaîme pour le split
dim arrDataFromFile 'Tableau pour contenir les valeurs du csv
bExisting = FALSE
sSplitValue = ";"
'Recoit un tableau de string en paramètre et remplace les occurences
'de sStringWhat avec sStringWith
Function fctReplaceStringInArray(arrToCheck,sStringWhat,sStringWith)
dim iLocalCounter
dim iLocalNbColumns
iLocalNbColumns = UBound(arrToCheck)
For iLocalCounter = 0 to iLocalNbColumns
arrToCheck(iLocalCounter) = Replace("" & arrToCheck(iLocalCounter),sStringWhat,sStringWith)
Next
fctReplaceStringInArray = arrToCheck
End Function
function GetFileObject(byval sFilePath)
Dim ofs, oFile
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.FileExists(sFilePath) then
set oFile = ofs.openTextFile(sFilePath)
Set GetFileObject = oFile
Else
Set GetFileObject = Nothing
Response.Write "ok"
Response.End
end if
set oFs = nothing
End function
Function IsExistingFile(byval sFilePath)
On Error Resume Next
Dim ofs
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.fileExists(sFilePath) then
IsExistingFile = True
Else
IsExistingFile = False
End if
Set ofs = nothing
If Err Then
Call ShowError(Err,"")
End If
End Function
sub deleteFile(byval sFilePath)
Dim ofs, oFile
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.fileExists(sFilePath) then
ofs.DeleteFile replace(sFilePath, "/", ""), true
end if
If Err Then
Call ShowError(Err,"")
End If
set oFile = nothing
Set ofs = nothing
End sub
sExelFilePath = "path" & Request("File") 'tu récupères le nom du fichier
sExelFilePath = server.mappath(sExelFilePath)
bExisting = IsExistingFile(sExelFilePath) 'tu check si le fichier existe bien (on sait jamais)
If bExisting Then
Response.Write "
Ok - File found on server
"
Else
Response.Write "
Error - File not found !
"
Response.End
End If
Response.Write " Processing insertion
"
'Get all value from file
'for each line
Set oFile = GetFileObject(sExelFilePath)
oFile.ReadLine() 'On passe la première ligne sans rien faire car il y a les headers
'On commence le processus d'insertion
Do while not oFile.AtEndOfStream
arrDataFromFile = Split(oFile.ReadLine(),sSplitValue) 'converti ma chaîne séparée par un ; (sPLitValue) en tableau.
arrDataFromFile = fctReplaceStringInArray(arrDataFromFile,"'","''")
'Construction du insert
sSQL = "INSERT INTO MATABLE (COLONE_1,COLONE_2,COLONE_3, ...,COLONNE_N) VALUES ( "
sSQL = sSQL & arrDataFromFile(0) & ","
sSQL = sSQL & "'" & arrDataFromFile(1) & "'," '<- ici c'est une string par exemple
sSQL = sSQL & arrDataFromFile(2) & ","
...
sSQL = sSQL & arrDataFromFile(N) & ","
sSQL = sSQL & ");"
ExecuteQueryNoError(sSql) 'appel de ta fonction/sub qui execute le sql (pour ca tu devrais avoir ton propre code)
Loop
'on ferme le fichier
oFile.Close()
Set oFile = Nothing
dim sExelFilePath 'Holds the file name & path
dim bExisting 'true if file found on server
dim oFile
dim oRS
dim sSplitValue 'Chaîme pour le split
dim arrDataFromFile 'Tableau pour contenir les valeurs du csv
bExisting = FALSE
sSplitValue = ";"
'Recoit un tableau de string en paramètre et remplace les occurences
'de sStringWhat avec sStringWith
Function fctReplaceStringInArray(arrToCheck,sStringWhat,sStringWith)
dim iLocalCounter
dim iLocalNbColumns
iLocalNbColumns = UBound(arrToCheck)
For iLocalCounter = 0 to iLocalNbColumns
arrToCheck(iLocalCounter) = Replace("" & arrToCheck(iLocalCounter),sStringWhat,sStringWith)
Next
fctReplaceStringInArray = arrToCheck
End Function
function GetFileObject(byval sFilePath)
Dim ofs, oFile
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.FileExists(sFilePath) then
set oFile = ofs.openTextFile(sFilePath)
Set GetFileObject = oFile
Else
Set GetFileObject = Nothing
Response.Write "ok"
Response.End
end if
set oFs = nothing
End function
Function IsExistingFile(byval sFilePath)
On Error Resume Next
Dim ofs
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.fileExists(sFilePath) then
IsExistingFile = True
Else
IsExistingFile = False
End if
Set ofs = nothing
If Err Then
Call ShowError(Err,"")
End If
End Function
sub deleteFile(byval sFilePath)
Dim ofs, oFile
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.fileExists(sFilePath) then
ofs.DeleteFile replace(sFilePath, "/", ""), true
end if
If Err Then
Call ShowError(Err,"")
End If
set oFile = nothing
Set ofs = nothing
End sub
sExelFilePath = "path" & Request("File") 'tu récupères le nom du fichier
sExelFilePath = server.mappath(sExelFilePath)
bExisting = IsExistingFile(sExelFilePath) 'tu check si le fichier existe bien (on sait jamais)
If bExisting Then
Response.Write "
Ok - File found on server
"
Else
Response.Write "
Error - File not found !
"
Response.End
End If
Response.Write " Processing insertion
"
'Get all value from file
'for each line
Set oFile = GetFileObject(sExelFilePath)
oFile.ReadLine() 'On passe la première ligne sans rien faire car il y a les headers
'On commence le processus d'insertion
Do while not oFile.AtEndOfStream
arrDataFromFile = Split(oFile.ReadLine(),sSplitValue) 'converti ma chaîne séparée par un ; (sPLitValue) en tableau.
arrDataFromFile = fctReplaceStringInArray(arrDataFromFile,"'","''")
'Construction du insert
sSQL = "INSERT INTO MATABLE (COLONE_1,COLONE_2,COLONE_3, ...,COLONNE_N) VALUES ( "
sSQL = sSQL & arrDataFromFile(0) & ","
sSQL = sSQL & "'" & arrDataFromFile(1) & "'," '<- ici c'est une string par exemple
sSQL = sSQL & arrDataFromFile(2) & ","
...
sSQL = sSQL & arrDataFromFile(N) & ","
sSQL = sSQL & ");"
ExecuteQueryNoError(sSql) 'appel de ta fonction/sub qui execute le sql (pour ca tu devrais avoir ton propre code)
Loop
'on ferme le fichier
oFile.Close()
Set oFile = Nothing
'On efface le fichier
Call deleteFile(sExelFilePath)
%>
<%@ Language=VBScript %><%
Option Explicit
%><%
dim sExelFilePath 'Holds the file name & path
dim bExisting 'true if file found on server
dim oFile
dim oRS
dim sSplitValue 'Chaîme pour le split
dim arrDataFromFile 'Tableau pour contenir les valeurs du csv
bExisting = FALSE
sSplitValue = ";"
'Recoit un tableau de string en paramètre et remplace les occurences
'de sStringWhat avec sStringWith
Function fctReplaceStringInArray(arrToCheck,sStringWhat,sStringWith)
dim iLocalCounter
dim iLocalNbColumns
iLocalNbColumns = UBound(arrToCheck)
For iLocalCounter = 0 to iLocalNbColumns
arrToCheck(iLocalCounter) = Replace("" & arrToCheck(iLocalCounter),sStringWhat,sStringWith)
Next
fctReplaceStringInArray = arrToCheck
End Function
function GetFileObject(byval sFilePath)
Dim ofs, oFile
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.FileExists(sFilePath) then
set oFile = ofs.openTextFile(sFilePath)
Set GetFileObject = oFile
Else
Set GetFileObject = Nothing
Response.Write "ok"
Response.End
end if
set oFs = nothing
End function
Function IsExistingFile(byval sFilePath)
On Error Resume Next
Dim ofs
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.fileExists(sFilePath) then
IsExistingFile = True
Else
IsExistingFile = False
End if
Set ofs = nothing
If Err Then
Call ShowError(Err,"")
End If
End Function
sub deleteFile(byval sFilePath)
Dim ofs, oFile
set ofs = Server.CreateObject("scripting.filesystemobject")
if ofs.fileExists(sFilePath) then
ofs.DeleteFile replace(sFilePath, "/", ""), true
end if
If Err Then
Call ShowError(Err,"")
End If
set oFile = nothing
Set ofs = nothing
End sub
sExelFilePath = "path" & Request("File") 'tu récupères le nom du fichier
sExelFilePath = server.mappath(sExelFilePath)
bExisting = IsExistingFile(sExelFilePath) 'tu check si le fichier existe bien (on sait jamais)
If bExisting Then
Response.Write "
Ok - File found on server
"
Else
Response.Write "
Error - File not found !
"
Response.End
End If
Response.Write " Processing insertion
"
'Get all value from file
'for each line
Set oFile = GetFileObject(sExelFilePath)
oFile.ReadLine() 'On passe la première ligne sans rien faire car il y a les headers
'On commence le processus d'insertion
Do while not oFile.AtEndOfStream
arrDataFromFile = Split(oFile.ReadLine(),sSplitValue) 'converti ma chaîne séparée par un ; (sPLitValue) en tableau.
arrDataFromFile = fctReplaceStringInArray(arrDataFromFile,"'","''")
'Construction du insert
sSQL = "INSERT INTO MATABLE (COLONE_1,COLONE_2,COLONE_3, ...,COLONNE_N) VALUES ( "
sSQL = sSQL & arrDataFromFile(0) & ","
sSQL = sSQL & "'" & arrDataFromFile(1) & "'," '<- ici c'est une string par exemple
sSQL = sSQL & arrDataFromFile(2) & ","
...
sSQL = sSQL & arrDataFromFile(N) & ","
sSQL = sSQL & ");"
ExecuteQueryNoError(sSql) 'appel de ta fonction/sub qui execute le sql (pour ca tu devrais avoir ton propre code)
Loop
'on ferme le fichier
oFile.Close()
Set oFile = Nothing
'On efface le fichier
Call deleteFile(sExelFilePath)
cs_tommie
Messages postés40Date d'inscriptionjeudi 18 mars 2004StatutMembreDernière intervention11 octobre 2005 24 mars 2005 à 13:38
salut,
en fait plusieurs données d'un fichier csv peuvent etre envoyées vers différentes tables
et oui il y a des foreign key sur quelques tables
pk cela pose t'il probleme?
juste une autre question encore:
cette fonction que tu m'as passé il faut que je l'execute sous quoi?
(dans des balises ASP,ou autre....???)