ADO_DATA_VIEW CONNEXION ET MANIPULATION DE BASES DE DONNÉES (SQL SERVER , ORACLE

pape0 Messages postés 132 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 1 septembre 2014 - 27 août 2011 à 23:08
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013 - 29 déc. 2011 à 16:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53521-ado-data-view-connexion-et-manipulation-de-bases-de-donnees-sql-server-oracle-mysql

cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
29 déc. 2011 à 16:03
Voici un lien pour télécharger l'installation de l'exécutable.
http://swappp.free.fr/tmp/UNIVERSAL_DATA_VIEWER_Install-Mdac28.exe
attention 21Mo
Cette version remaniée intègre beaucoup plus de fonctionnalités que la source déposée, mais la base est identique.
schnapsman Messages postés 4 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 29 décembre 2011
29 déc. 2011 à 11:22
Bonjour, ce dev m'intéresse mais il me faudrait le .exe possible de l'intégrer en renommant l'extension ?

J'ai un compilateur VB8 mais la mise à jour auto du dev en VB6 ne marche pas.

Merci
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
4 sept. 2011 à 19:53
Bonjour,
Une procédure stockée s'exécute comme une commande paramétrée mais au lieu de passer dans CommandText un ordre Sql il faut simplement indiquer le nom de la procedure Stockée. De plus dans CommandeType il faut indiquer adCmdStoredProc.
Voici un exemple :
Private Sub ExecStoredProcedure()
Dim i as integer
Dim j as integer
Dim lNbLignesAffectees as long
Dim iNbErreurs as integer
Dim Message_Erreur As String
Dim vVal as Variant
Dim sCmd As clsAdoCmdRst

'
Set sCmd = New clsAdoCmdRst
sCmd.setCmdConn = dbConn
sCmd.setCmdType = adCmdStoredProc
'Au lieu de passer une commande Sql , c'est le nom de la procédure stockée qui est transmis
sCmd.setCmdTexte = "NOM_DE_LA_PROCEDURE"
sCmd.setCmdPrepared = True
'Renseigner si nécessaire les Paramètres à passer à la procédure stockée
i = sCmd.GetAdoCmdNbParam
If i > 0 Then
For j = 1 To i
If sCmd.GetParamDirection(j) = adParamInput Then
If sCmd.GetParamDataType(j) = adBigInt Or adCurrency Or adDecimal Or adDouble Or adInteger Or adNumeric Or adSingle Or adSmallInt Or adTinyInt Then
vVal = ""
Do While IsNumeric(vVal) = False
vVal = InputBox("Valeur Numérique à affecter au paramètre " & sCmd.GetParamName(j), sCmd.GetParamName(j), "")
Loop
sCmd.setParamValue j, Val(vVal)
ElseIf sCmd.GetParamDataType(j) = adChar Or adVarChar Or adLongVarChar Then
vVal = Null
vVal = InputBox("Valeur Texte à affecter au paramètre " & sCmd.GetParamName(j), sCmd.GetParamName(j), "")
sCmd.setParamValue j, CStr(vVal)
ElseIf sCmd.GetParamDataType(j) = adDBDate Or adDate Or adDBTime Or adDBTimeStamp Then
vVal = Null
vVal = InputBox("Valeur Date à affecter au paramètre " & sCmd.GetParamName(j), sCmd.GetParamName(j), "")
sCmd.setParamValue j, CStr(vVal)
End If
End If
Next
End If
'Exécuter la procédure en mode asynchrone si son temps d'exécution dépasse quelques secondes.
sCmd.ExecAdoCmd lNbLignesAffectees, iNbErreurs, Message_Erreur, True
'Afficher ou enregistrer les valeurs éventuelles retournées par la procédure stockée
i = sCmd.GetAdoCmdNbParam
If i > 0 Then
For j = 1 To i If sCmd.GetParamDirection(j) adParamOutput Or sCmd.GetParamDirection(j) adParamInputOutput Then
vval = sCmd.GetParamValue(j)
if isnull(vVal) then vVal="Null"
Debug.Print sCmd.GetParamName(j) & " : " & vVal
End If
Next
End If
Set sCmd = Nothing
End Sub
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011
4 sept. 2011 à 19:31
Bonjour a tous.
J'ai apprécié l'ajout de l'exécution des commandes paramétrées, c'est très util et effectivement super rapide lors d'exécutions répétitives. J'ai tenté d'exécuter une procédure stockée mais sans succès, pourtant le processus est identique aux commandes paramétrées non?
Si quelqu'un a une idée..
haitek Messages postés 26 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 13 mars 2014
4 sept. 2011 à 19:02
Re-bonjour,
Les programmes (la première version ainsi que la seconde mise à jour) fonctionnent sur Win2000. En cochant la référence de "Microsoft ActiveX Data Objects 2.5 Library", l'application se déroule bien.
J'ai eu trois versions de cette "library" le 2.0, 2.1 et le 2.5 sur la même machine. Bien que Multiprise se sert de la version 2.8 Microsoft ActiveX Data Objects, son programme s'exécute avec la 2.5.

Sur mon ordi à WinXP, seule la version 2.8 de cette fameuse bibliothèque était disponible. Ce qui explique que l'application a tout de suite fonctionné ...

En résumé, c'est la version "Microsoft ActiveX Data Objects" non conforme qui est la raison de mon problème ...

Mes reconnaissances à l'auteur de "ADO_DATA_VIEW CONNEXION ET MANIPULATION DE BASES DE DONNÉES (SQL SERVER , ORACLE, MYSQL...)"
haitek Messages postés 26 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 13 mars 2014
4 sept. 2011 à 17:50
Bonjour,
Merci à Multiprise d'avoir penché à mon problème. Je suis arrivé à l'exécuter et à le compiler avant d'avoir vu ces derniers commentaires. L'aide m'a signifié quelque chose du genre "une version de DLL en langue différente ou une différence sur les plate-formes" pourrait être la raison. En exécutant le programme sur la même ordi avec WinXP SP2, l'application s'est déroulée convenablement (configuration : WinXP Pro fr SP2 + Visual Studio 6 Entreprise avec SP6 + MS Office 2000 Premium).
Le test sur MySQL 5.5.8 n'a pas eu d'incident négatif. Je vais le tester avec MSSQL Server 7.0 et 2000 pour voir...
En tout cas, cela m'était une aventure extraordinaire. Encore merci, pour ton programme...
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
4 sept. 2011 à 00:46
C'est déjà plus clair.
L'interpréteur va commencer par taiter la sous-requête et ramener les valeurs. Ensuite il va balayer ta première table et remplacer les valeurs qui correspondent aux critères de recherche, mais comme certaines valeurs n'existent pas dans la deuxième table, il va remplacer par défaut par un null, l'instruction principale étant
UPDATE Table_A SET Table_A.Colonne=
sans autre critère de filtrage, il remplace toutes les valeurs.
Il faut que tu ajoutes une condition de la forme ' j'update à condition que la correspondance existe dans la seconde table'
Donc à ta requête tu ajoutes
WHERE EXISTS (SELECT 1 from Table_B WHERE Table_B.Colonne2 = Table_A.Colonne)
Une remarque, comme je te disais si plusieurs valeurs correspondent à ta condition initiale, un message d'erreur va te stopper net.
A moins que tu sois sur de ne ramener qu'une valeur, il vaut mieux ajouter un distinct après le select, ce n'est pas encore suffisant pour l'unicité mais c'est un filtre supplémentaire. ta commande sera donc:
UPDATE Table_A SET Table_A.Colonne=(Select DISTINCT Table_B.Colonne FROM Table_B Where Table_B.Colonne2 = Table_A.Colonne)
WHERE EXISTS (SELECT 1 from Table_B WHERE Table_B.Colonne2 = Table_A.Colonne)
Mais si tu veux être sur de l'unicité il est préférable d'utiliser la condition Max ou Min, c'est à voir suivant le contexte, ta commande sera donc:
UPDATE Table_A SET Table_A.Colonne=(Select MAX(Table_B.Colonne) FROM Table_B Where Table_B.Colonne2 = Table_A.Colonne)
WHERE EXISTS (SELECT 1 from Table_B WHERE Table_B.Colonne2 = Table_A.Colonne)
Tu peux remplacer MAX par MIN selon les cas, là tu es sur de l'unicité de la valeur renvoyée par la sous-requete.
Il y a d'autres manières mais en gros c'est une solution efficace.
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011
4 sept. 2011 à 00:21
C'est a peu près ça, je complète ton exemple:
UPDATE Table_A SET Table_A.Colonne=(Select Table_B.Colonne FROM Table_B Where Table_B.Colonne2 = Table_A.Colonne)
La requête est correcte non?
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
4 sept. 2011 à 00:15
Précise, donne-moi un exemple, car là je n'ai pas tout saisi.
Lorsqu'on alimente un champ d'une table depuis une autre table, la commande est du type:
UPDATE Table_A SET Table_A.Colonne=(Select Table_B.Colonne FROM Table_B Where Conditions)
Mais ce n'est pas suffisant. Car si Plusieurs valeurs correspondent aux critères de la clause Where, une erreur est générée( la sous-requete à ramenée plusieurs valeurs ce qui n'est pas autrorisé etc.. etc...)
Donne-moi + de détails.
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011
4 sept. 2011 à 00:06
J'ai une autre question, losque je veux renseigner une table depuis une autre, certaines valeurs sont bien updatées mais les autres deviennes nulles sans raison apparente. Ma requete est pourtant correcte, pas de message d'erreur...
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011
3 sept. 2011 à 23:54
Oups!!! ça marche. Merci de ton aide...
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
3 sept. 2011 à 23:35
Bonjour Swapp et à tous.
Ton problème est en fait très simple, ne jamais oublier que pour sqlServer Null et vide sont différents, par contre pour Oracle, null et vide sont identiques, une chaîne non null mais vide sera considérée comme nulle. De ce fait, c'est comme si dans ton instruction tu disais WHERE NOMSOC is Null Or NOMSOC IS Null
L'interpréteur va vérifier la commande, pas de faute de syntax, elle est considérée comme correcte donc pas de code erreur. Mais l'interpréteur est perdu Null ou Null il ne sait pas traiter et ne fait rien. C'est aussi simple que çà.
J'espère avoir été clair, supprime une condition pour oracle et tes données seront modifiées comme pour SqlServer.
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011
3 sept. 2011 à 23:23
Je viens de télécharger la maj et l'ai exécuter sans problème sous 2003 serveur. Super l'option de modification de valeurs depuis un fichier d'équivalences, je galèrais depuis pas mal de temps sur le sujet sans trouver de solution acceptable et surtout générique.
Une Question, sous sql serveur lorsque j'exécute cette requête:
UPDATE TblSociete SET NomSoc= 'UNKNOW' where ltrim(rtrim(NomSoc))='' or NomSoc is null
L'exécution est correcte et mes données sont bien modifiées.
Par contre la même requête sous Oracle ne modifie rien sans me mettre en erreur, as-tu une idée? j'avoue ne pas comprendre.
Merci de ta réponse ou de la réponse d'un autre qui connait ce problème.
swappp Messages postés 11 Date d'inscription lundi 22 août 2011 Statut Membre Dernière intervention 4 septembre 2011
3 sept. 2011 à 23:03
Superbe, vu comme çà c'est simple, éducatif et plein de ressources.
j'ai particulièrement aimé (c'est un détail à côté du reste) la manière de déplacer les volets façon split control, simple et efficace.
Ca vaut 9.999
cs_Multiprise Messages postés 63 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 23 avril 2013
3 sept. 2011 à 22:34
Je suis confus, effectivement les références sont issues de Windows 7 et ne fonctionnent que sous les déclinaisons de W7 et Vista. J'ai donc modifié en conséquence pour que toute version (de 2000 à W7) puisse faire tourner le soft. Je vais de ce pas faire une mise à jour. Elle sera de plus plus riche en fonctionnalités (ce ne sont que des exemples de possibilités que chacun pourra enrichir ou modifier à sa guise). J'ai également corrigé certaines erreurs non gérées, en particulier les valeurs nulles qui sont toujours délicates à traiter.
J'ai ajouté une classe qui permet de d'exécuter des commandes paramétrées (testées sous Sql Server et Oracle), avec conversion (rudimentaire) des instructions de MsSql vers Oracle et vice versa.
Désolé pour cette faute de débutant.
Je joins également en format JPG les références à sélectionner ainsi que les bibliothèques de contrôle.
Pour ce qui concerne l'exécutable, ce n'est apparement pas possible, il avait été joint mais systématiquement 'zappé' , désolé, je pense qu'il s'agit d'une raison de sécurité bien légitime.
Pour ce qui concerne l'équivalent en .Net, c'est tout à fait transposable, c'est même fait (ce ne sera pas diffusé pour l'instant). mais retroussez vos manches et a vos claviers, c'est un très bon exercice, pas simple j'en conviens mais toutes les bases sont là, il suffit d'adapter de réfléchir de se creuser les méninges quoi!.
Si vraiement un Exe est indispensable, je pourrais mettre un lien, sachant que le but de ce site n'est pas de donner du poisson, mais d'apprendre à le pêcher (sic Confucius je crois).
haitek Messages postés 26 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 13 mars 2014
3 sept. 2011 à 18:14
J'apprécierai un exécutable pour le tester ... Merci...
haitek Messages postés 26 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 13 mars 2014
3 sept. 2011 à 18:11
Bonjour,
S'il y a quelqu'un qui peut m'expliquer pourquoi je ne peux pas exécuter ce programme. J'en serais très reconnaissant. En l'exécutant le curseur curseur s'est arrêté sur le mot clé "adOptionStatic" du module_ADO pour "Erreur de compilation : projet ou bibliothèque introuvable". En l'exécutant avec compilation complète CTRL+F5, "Erreur de compilation : projet ou bibliothèque introuvable" le curseur s'arrête sur le mot clé "Trim". Pourtant un petit programme dans lequel j'utilise ces 2 mots clés se déroule normalement. J'ai coché les références sur sur les 2 applications... Que c'est compliqué...
blq Messages postés 97 Date d'inscription vendredi 22 octobre 1999 Statut Membre Dernière intervention 13 juin 2016 1
31 août 2011 à 22:51
Je rejoins le premier commentaire. Une version en VB.net serait fortement plus intéressante et éducative. Bravo pour ce travail.
HACKANDROID Messages postés 103 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 3 janvier 2013
30 août 2011 à 23:41
Bon boulot!
haitek Messages postés 26 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 13 mars 2014
30 août 2011 à 05:42
Bonjour,
Ce programme m'est d'une grande utilité. Je félicite l'auteur.J'avoue ne pas pouvoir l'exécuter. Le message "Erreur de compilation : projet ou bibliothèque introuvable". Le curseur s'est arrêté sur le mot clé "adOptionStatic" du module_ADO. Ayant coché toutes les références Microsoft, il refuse toujours de s'exécuter. Je travaille sur Windows 2000 Pro, MS Office 2000 Premium, Visual Studio 6 Entreprise. Mes connaissances en langage basic remonte au GW-BASIC sous MSDOS. Je suis débutant en VB. Pouvez-vous énumérer toutes le références nécessaires s'il vous plaît ? Merci
cs_Chrysostome Messages postés 40 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 8 juillet 2013
29 août 2011 à 10:31
Superbe travail qui regroupe différentes activités de mon quotidien!
pape0 Messages postés 132 Date d'inscription mercredi 18 février 2004 Statut Membre Dernière intervention 1 septembre 2014
27 août 2011 à 23:08
Une version en VB.net serais kool.
Rejoignez-nous