Lire les données d'une base Postgres (erreur "cross-database references are not [Résolu]

Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 13:21 - Dernière réponse :
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 19 avril 2007 à 11:36
Bonjour,

J'ai un problème qui commence à m'énervé. J'ai une base postgres (local) je
veut simplement m'y connecter (ça c'est bon) et lire les données de mes tables
(c'est là que ça coince). Voila mon code :


Dans un module :

----------------------------------------

Public conn As ADODB.Connection

Public Record As ADODB.Recordset


----------------------------------------


La connexion :

----------------------------------------

Set conn = CreateObject("ADODB.Connection")

conn.Open "Driver={PostgreSQL Unicode};Server=" &
Me.TextServeur.Text & ";Port=5432;Database=" &
Me.TextBaseDeDonnées.Text & ";UID=" & Me.TextLogin.Text &
";PWD=" & Me.TextPassWord.Text


----------------------------------------


La lecture :

----------------------------------------

Set Record = New ADODB.Recordset

Record.ActiveConnection = conn

Record.Open "SELECT * FROM public.Tables.AnalysesSpecifiques", conn,
adOpenDynamic, adLockOptimistic '*****************************


----------------------------------------

L'erreur se produit à la ligne en gras marqué d'*.




Message d' erreur :


----------------------------------------

Run-time error '-2147467259 (80004005)':


ERROR: cross-database references are not implemented:

"public.tables.analysesspecifiques";

Error while executing the query


----------------------------------------



J’ai déjà essayé plusieurs 'truc' mais rien ne
marche toujours la même erreur (ou alors une erreur me disant "… relation 'analysesspecifiques'
does not exist; …")
J’espère avoir été suffisamment précis. Merci par avance










<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:24pt;
height:24pt'/><![endif]-->
<!--[if !vml]-->
<!--[endif]-->
Amicalement <!--[if gte vml 1]><v:shape
id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:/DOCUME~1/Vincent/LOCALS~1/Temp/msoclip1/01/clip_image002.gif"
o:href="http://www.vbfrance.com/imgs2/smile_big.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->



<!--[if !supportEmptyParas]--> <!--[endif]-->
Afficher la suite 

Votre réponse

26 réponses

Meilleure réponse
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 13 avril 2007 à 11:33
3
Merci
CA MARCHE!!!!!!!!!!!!







































Bon bà voila j'execute ma requête comme ça :
    Set RetourDonnees = conn.Execute
("SELECT ""NumAxesAnalysesSpecifiques"",""NombreCaracAxesAnalysesSpecifiques"" FROM ""public"".""AnalysesSpecifiques""")
    Debug.Print RetourDonnees.GetString(adClipString, -1, ";", "|", "NULL")

Donc voila. Je ne comprand toujour pas pourcois ça ne fonctione pas avec la propriété "open" mais bon.

MERCI à tous du temps que vous m'avez consacré.

Récapitulatif pour ceux que ça intéreserais :

Variable global :

Public conn As ADODB.Connection
Public RetourDonnees As ADODB.Recordset

Set des variable :

    Set conn = New ADODB.Connection

Connection :

    conn.Mode = adModeReadWrite
    conn.Open "Driver={PostgreSQL Unicode};Server=" & Me.TextServeur.Text & ";Port=5432;Database=" & Me.TextBaseDeDonnées.Text & ";UID=" & Me.TextLogin.Text & ";PWD=" & Me.TextPassWord.Text

Lecture de données :

    Dim Chaine as String
    Set RetourDonnees = conn.Execute("SELECT ""NumAxesAnalysesSpecifiques"",""NombreCaracAxesAnalysesSpecifiques"" FROM ""public"".""AnalysesSpecifiques""")
    Chaine = RetourDonnees.GetString(adClipString, -1, ";", "|", "NULL")
    RetourDonnees.Close
    Set RetourDonnees = Nothing

Remarque dans ce cas un ; est entre chaque données de chaque clolone, un | entre chaque enregistrement et la chaine NULL est insérer si la valeur est null.

Ecriture de données :

    conn.Execute "INSERT INTO ""public"".""AnalysesSpecifiques"" (""NumAxesAnalysesSpecifiques"",""NombreCaracAxesAnalysesSpecifiques"") VALUES (4,15)"

Attention je rapel que en Postgres un nom de shéma est nésesaire si non il ne trouve pas la table (pourcois, alors ça???) dans mon cas ce shéma se nome "public". Il faux également que les nom de tables et de colones sois entre ". Bon bà je crois que tout y est. Si quelqu'un à une question sur ce sujet qu'il la pose dans ce topic je crois que j'ai compris commant ça marche.

Amicalement

Merci Polack77 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Polack77
Meilleure réponse
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 19 avril 2007 à 11:36
3
Merci
Heeeeee, j'ai du nouveau :
Les " ne sont obligatoire que dans le cas ou des caractères
accentués ou majuscules sont présent dans les noms de tables ou de
colonnes. (Et vue que moi comme un <strike>con</strike> idiot j'avais mit des majuscules dans tout mes
nom ça ne risquais pas de marcher sans)

A+
Amicalement
Pensée "Réponce acceptée"

Merci Polack77 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Polack77
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 13:52
0
Merci
Je sais pas c'est tu auras une différence mais moi je fais,

Set conn = new ADODB.connection
conn .CursorLocation = adUseClient

conn.Open "Driver={PostgreSQL Unicode};Server=" & Me.TextServeur.Text & ";Port=5432;Database=" & Me.TextBaseDeDonnées.Text & ";UID=" & Me.TextLogin.Text & ";PWD=" & Me.TextPassWord.Text

Set Record = New ADODB.Recordset
Record .CursorLocation = adUseClient

Record.Open "SELECT * FROM Nom_Table", conn, adOpenDynamic, adLockOptimistic

Avec le nom de la table
Commenter la réponse de cs_Nicko11
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 14:00
0
Merci
En fait, tu mets ca:

Record.ActiveConnection = conn

et apres tu le mets dans la chaine de record.open. Donc je ne pense pas que ce soit utilie.

ensuite, je pense que le nom de table que VB va chercher est  public.Tables.AnalysesSpecifiques
et pas le nom qui s'y rattache.

Cela serait plutot

Record.Open "SELECT * FROM' " &  public.Tables.AnalysesSpecifiques & " ', conn, adOpenDynamic, adLockOptimistic

Je ne suis pas sur des '    '    mais au pire tu essaies sans.
Commenter la réponse de cs_Nicko11
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 14:13
0
Merci
Je viens de tester et les crochets sont en fait plus adaptés donc ca donne,

Record.Open "SELECT * FROM [ " &  public.Tables.AnalysesSpecifiques & " ] ", conn, adOpenDynamic, adLockOptimistic
Commenter la réponse de cs_Nicko11
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 14:14
0
Merci
Non rien ne fonctionne.
La 1ére solution : me renvoie l'erreur "relation 'analysesspecifiques' does not exist;"
La 2ème : "Syntax error" avec les ' et "cross-database references are not implemented" sans les '

par contre je n'ai pas compris ce que tu veut dire par :"
je pense que le nom de table que VB va chercher est  public.Tables.AnalysesSpecifiques
et pas le nom qui s'y rattache."

Image de ma base de donnée (faite avec "pgAdmin III")  peut être que ça peut aider

Merci quand même

Amicalement
Commenter la réponse de Polack77
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 14:19
0
Merci
Construit comme ça :
Record.Open "SELECT * FROM [ " &  public.Tables.AnalysesSpecifiques & " ] " ...
J'ai comme erreur "External name not defined". Cette chaine n'est pas une variable VB mais le chemain pour trouver la table de ma base (enfain je crois)

Amicalement
Commenter la réponse de Polack77
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 14:25
0
Merci
Record.Open "SELECT * FROM public.Tables.AnalysesSpecifiques", conn, adOpenDynamic, adLockOptimistic

Ici, je pense que VB essaiera de te connecter a une base qui s'appelle public.Tables.AnalysesSpecifiques et pas le nom qui s'y rapporte. Remplace dans cette meme ligne ( et  pas les autres)  par le nom de ta table directement pour voir. Si ca ne marche pas, c'est que ta connexions n'est pas bonne.

Essaie quand meme apres avec la ligne que je t'ai donné avec les [].

A tout de suite, j'attend que tu repondes
Commenter la réponse de cs_Nicko11
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 14:31
0
Merci
Non ça ne marche pas erreur :
-----------------------------------
Run-time error '-21474667259 (80004005)':

ERROR: relation "analysespecifiques" does not exist;
Error while executing the query
-----------------------------------

Tu crois que ça viens de la connection???
Comment la faire dans ce cas (j'ai déjà hue du mal à la faire fonctioné comme ça???)

Je commance à me dire que je vais faire ma base en MySQL (le problème est que mon suppérieur veut une base PostGres, je ne sais pas pourcois en plus, et c'est la première fois que je travail avec)
Amicalement
Commenter la réponse de Polack77
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 14:56
0
Merci
Je ne sais pas trop car moi, j'utilise access, mais normalement ca au pire, ca devrait fonctionner:
Record.Open "SELECT * FROM  AnalysesSpecifiques", conn, adOpenDynamic, adLockOptimistic

Bien sur le nom de ta table doit bien etre AnalysesSpecifiques, ce qui a l'air d'etre le cas d'apres ton schéma. Donc, c'est pour ca que mes doutes penchent vers ta chiane de connexion.

Pour prouver que ta chaine de connexion fonctionne bien, qu'a tu fais comme test (puisque tu me dis que ca fonctionne).
Commenter la réponse de cs_Nicko11
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 15:22
0
Merci
Le teste pour la connection est "conn.State" qui me retourne 1

Amicalement
Commenter la réponse de Polack77
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 15:36
0
Merci
Si tu veux, je te donne un bout de code qui m'a permis d'aller chercher dans une BDD toutes mes tables. Donc tu pourras verifier si elle est présente. C'est du VBA, donc fais attention au différence s'il y en a

Dim bdd As New ADOX.Catalog
Dim Tableau As ADOX.Table                                                                         


Set bdd.ActiveConnection = ma_connexion    'donc conn   dans ton cas

For Each Tableau In bdd.Tables
        msgbox Tableau.Name 
Next

Je pense que ca devrait fonctionner. Pour utiliser ADOX, il faut aller dans projet -> références je crois et cliquer sur Microsoft activeX data objet, faut voir essaie.

Au moins avec ca tu peut voir les tables qui y figurent.
Commenter la réponse de cs_Nicko11
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 10 avril 2007 à 15:49
0
Merci
Bonjour,
dans une requête ce qui vient après le point doit correspondre à un champ
Mais puisque tu mets * c' est donc tous les champs.
Il y' a donc erreur dans le nom de la table
public.Tables.AnalysesSpecifiques
-

-
Commenter la réponse de chaibat05
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 15:51
0
Merci
Heeee,
Je n'arrive pas à utilisé ADOX.

J'ai ajouté tour à tour :

Microsoft activeX data object 2.8 Library
Microsoft activeX data object 2.7 Library
Microsoft activeX data object 2.6 Library
Microsoft activeX data object 2.5 Library
Microsoft activeX data object 2.0 Library

Et même :
Microsoft activeX data object  (Multi-dimensional) 2.8 Library

Ou encors:
Microsoft ActiveX Data Objects Recordset 2.8 Library

Toujours la même erreur : "User-defined type not defined"
Quel version utilise tu?
Amicalement
Commenter la réponse de Polack77
Messages postés
1884
Date d'inscription
samedi 1 avril 2006
Dernière intervention
20 novembre 2007
- 10 avril 2007 à 15:59
0
Merci
Parfois le poblème est lié à l' ordre des références.
Places la reference à l' ActiveX en premier

-

-
Commenter la réponse de chaibat05
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 16:01
0
Merci
Excuse moi alors j'ai du me tromper, ca doit etre Microsoft ADO ext 2.8. for DLL and security
Commenter la réponse de cs_Nicko11
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 16:06
0
Merci
Ca marche.
Hé pas mal comme petit truc
Bon bà ca me retourne bien le nom de mes 4 tables (sans référence soit : "AnalysesSpecifiques" "Article" "Franco" "Vecteur")

Amicalement
Commenter la réponse de Polack77
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 16:16
0
Merci
Bon, je suis content que ca marche. Au moins tu sais que tu n'es pas fou en inventant des tables imaginaires. 

Maintenant ca m'arrange pas car je sais pas quoi te dire si tu trouve bien la table AnalysesSpecifiques.

Ta connexion semble bien marcher et ton record.open semble etre correct. 2 dernieres choses avant banquerout totale.

Essaie de nommer ton record.open, on sait jamais car record est peut etre reservé.
Enfin, ton erreur parle de relation. Tu devrais peut etre aussi voir de quoi il en retourne car dans access j'ai un menu nommé relation. Cela pourrait etre la cause de tout.

Tiens moi au courant, ca fera toujours un peu de culture personnelle mais si SQL SERVER, j'y connais rien.

BONNE CHANCE
Commenter la réponse de cs_Nicko11
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 10 avril 2007 à 16:26
0
Merci
Je fais encors des testes (si j'ai des info je te le fais savoir par un post dans ce topic) et si demain ca ne marche toujours pas je passe en MySQL (je connais donc logiquement pas de problème).

Merci pour tout ce temps que tu à pue m'accordé 

Amicalement
Commenter la réponse de Polack77
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
- 10 avril 2007 à 16:30
0
Merci
Encore une chose, tu as essayé de te connecter a une autre table? A mon avis tu ne dois pas etre loin.

C'est bizarre mais aujourd'hui, c'est la journée "j'arrive pas à me connecter". Essaie demain LOL.

A+
Commenter la réponse de cs_Nicko11

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.