[In C] Problem mit UPDATE über mehrere DBs
[In C] Problem mit UPDATE über mehrere DBs
am 24.08.2006 10:48:03 von benjamin235
Hallo Leute!
Ich hab da ein Problem, das ich nicht lösen kann. Mir fehlt das
Wissen, um genau zu sein! Ich programmiere in C unter Linux (mit MySQL)
und will einen UPDATE-Befehl über 2 (oder später über mehrere DBs)
machen, weiß aber nicht wie! Also ich habe eine ganz normale
Verbindung zu meiner Datenbank aufgestellt und alles andere in meinem
Programm benutzt auch immer nur eine einzige DB. Nur mit dem, was ich
jetzt mache, benötige ich auch noch eine zweite. Also mein
UPDATE-Befehl soll auf 2 verschiedene DBs zugreifen. Hier mal der
Befehl:
"UPDATE test1, test2 SET test2.MCC =3D test1.Land WHERE test1.MCC =3D
test2.REALM AND test2.Type =3D 'Name'";
Ich hab schon den Befehl mysql_select_db() aus der C-API verwendet, nur
dann verbindet er sich ja nur mit einer anderen DB und nicht mit 2.
Wie verbinde ich mich denn mit den 2 DBs gleichzeitig, oder ist das
nicht möglich? Hier nochmal die Verbindung:
if (mysql_real_connect(conn, IP, Benutzer, Passwort, Datenbank, Port,
NULL, 0) == NULL) {
/* Fehlerabfrage */
}
Wäre echt super wenn ihr mir da Hilfestellung geben könntet. Ich bin
da nämlich echt schon am Verzweifeln, da ich schon einige Tage an
diesem Problem sitze und keine Lösung finde.
Danke schonmal.=20
Benjamin
Re: [In C] Problem mit UPDATE über mehrere DBs
am 24.08.2006 11:12:56 von Christian Kirsch
benjamin235@web.de schrieb:
^^^^
Armes Kind, wenn Du wirklich so heißen solltest. Wenn nicht: Hier sind
Realnamen gern gesehen.
> Ich hab da ein Problem, das ich nicht lösen kann. Mir fehlt das
> Wissen, um genau zu sein! Ich programmiere in C unter Linux (mit MySQL)
> und will einen UPDATE-Befehl über 2 (oder später über mehrere DBs)
Dazu gab's doch gerade erst einen Thread hier - hast Du den nicht
gelesen oder postest Du, bevor Du suchst?
> machen, weiß aber nicht wie! Also ich habe eine ganz normale
> Verbindung zu meiner Datenbank aufgestellt und alles andere in meinem
> Programm benutzt auch immer nur eine einzige DB. Nur mit dem, was ich
> jetzt mache, benötige ich auch noch eine zweite.
Schlecht. Denn wie soll das in *einer* Connection mit der
Authentifizierung funktionieren? Siehst Du irgendwelche Anhaltspunkte
im C-API, dass das gehen *könnte*?
> Also mein
> UPDATE-Befehl soll auf 2 verschiedene DBs zugreifen. Hier mal der
> Befehl:
>
> "UPDATE test1, test2 SET test2.MCC = test1.Land WHERE test1.MCC =
> test2.REALM AND test2.Type = 'Name'";
>
Sicherlich nicht. SO greifst Du auf zwei verschiedene *Tabellen* in
*einer* Datenbank zu. Was Du übrigens auch durch Absetzen des
Statements in mysql (dem Kommandozeilen-Tool) ausprobieren könntest.
> Ich hab schon den Befehl mysql_select_db() aus der C-API verwendet, nur
> dann verbindet er sich ja nur mit einer anderen DB und nicht mit 2.
Ja.
> Wie verbinde ich mich denn mit den 2 DBs gleichzeitig, oder ist das
> nicht möglich? Hier nochmal die Verbindung:
>
> if (mysql_real_connect(conn, IP, Benutzer, Passwort, Datenbank, Port,
> NULL, 0) == NULL) {
> /* Fehlerabfrage */
> }
>
Du müsstest eben mysql_reqal_connect *zweimal* aufrufen, jeweils mit
den passenden Parametern. Dann hättest Du zwei 'conn'-Pointer ... Was
Dir aber in *einem* UPDATE nix hilft. Nein, es geht *so* nicht. Was
Du, wie gesagt, einfach durch Suchen und Lesen hättest feststellen können.
Du könntest vielleicht eine Federated DB benutzen, ab MySQL
5.irgendwas. Auch dazu stand was in dem erwähnten Thread.
Re: Problem mit UPDATE über mehrere DBs
am 24.08.2006 11:30:04 von benjamin235
Christian Kirsch schrieb:
> benjamin235@web.de schrieb:
>
> ^^^^
> Armes Kind, wenn Du wirklich so heißen solltest. Wenn nicht: Hier sind
> Realnamen gern gesehen.
Also ich "armes Kind" hab leider zu vorschnell gehandelt. Ich hab
einfach gepostet ohne zu suchen. Das tut mir echt unendlich leid, aber
Fehler kann ja jeder mal machen!
> Schlecht. Denn wie soll das in *einer* Connection mit der
> Authentifizierung funktionieren? Siehst Du irgendwelche Anhaltspunkte
> im C-API, dass das gehen *könnte*?
Nein!
> > Also mein
> > UPDATE-Befehl soll auf 2 verschiedene DBs zugreifen. Hier mal der
> > Befehl:
> >
> > "UPDATE test1, test2 SET test2.MCC =3D test1.Land WHERE test1.MCC =3D
> > test2.REALM AND test2.Type =3D 'Name'";
> >
>
> Sicherlich nicht. SO greifst Du auf zwei verschiedene *Tabellen* in
> *einer* Datenbank zu. Was Du übrigens auch durch Absetzen des
> Statements in mysql (dem Kommandozeilen-Tool) ausprobieren könntest.
Dieser UPDATE-Befehl war nur zur Veranschaulichung gedacht. Mir war
klar, dass er so nicht geht.
> Du könntest vielleicht eine Federated DB benutzen, ab MySQL
> 5.irgendwas. Auch dazu stand was in dem erwähnten Thread.
Nein kann ich nicht, da ich feste Vorgaben habe, aber trotzdem mal
danke für deine Bemühungen!
Re: [In C] Problem mit UPDATE übermehrere DBs
am 24.08.2006 12:44:13 von Thomas Rachel
benjamin235@web.de wrote:
> und will einen UPDATE-Befehl über 2 (oder später über mehrere DBs)
> machen, weià aber nicht wie!
Wichtig: Du brauchst mit einem Login Zugriiff auf alle DBs, die Du
ansprechen willst.
> "UPDATE test1, test2 SET test2.MCC = test1.Land WHERE test1.MCC =
> test2.REALM AND test2.Type = 'Name'";
> Ich hab schon den Befehl mysql_select_db() aus der C-API verwendet,
.... um die DB festzulegen, die verwendet wird, wenn im Tabellennamen keine
DB erwähnt wird.
Normalerweise müÃte - sofern die Permissions stimmen, was bei der anderen
Anfrage nicht der Fall war - sich so was realisieren lassen wie
UPDATE db1.tab1 JOIN db2.tab2 USING (id) SET tab1.desc='klappt' WHERE
db2.tab2.trans_id=132;
> dann verbindet er sich ja nur mit einer anderen DB
Zunächst mal verbindet er sich mit einem Server. Potentiell hast Du damit
Zugriff auf alle Tabellen in allen Datenbanken, sofern es nicht durch
entsprechende Permissions unterbunden wird.
Die "select"ete DB ist nur die Default-DB.
Thomas
Re: Problem mit UPDATE über mehrere DBs
am 24.08.2006 13:18:14 von benjamin235
Danke für deine Hilfe!
Es klappt! Ich hab ja auch die Rechte auf alle anderen DBs zuzugreifen.
Eigentlich geht es ja einfach, aber wenn man mal so ein Brett vorm Kopf
hat geht eben gar nichts. Danke nochmal!