Requetes SQL

Fermé
herve - 10 janv. 2002 à 10:13
 herve - 10 janv. 2002 à 14:33
Je voudrais faire une comparaison entre deux tables de 2 bases de donnees differntes avec visual basic .
Ex: Set rs = db.OpenRecordset("SELECT * FROM table1(de la base1) Where Not Exists (SELECT * FROM table2(de la base2))")...
db.openRecordset marche pour la table1 de la base1 mais la table 2 n'est pas vu .
QQ'un aurrait t'il une reponse ?
Sinon quel est la commande pour dire : select * from table1 where dateenregistrement= date du jour .
Merci

4 réponses

Pour le 1), j'ai tendance à me méfier du 'NOT EXISTS'.
Préfère:
SELECT * FROM table1(de la base1) Where cléprimaire not in (SELECT cléprimaire FROM table2(de la base2))

Ainsi, le second select ne ramènera que les clés primaire de la seconde base, ce qui est nettement moins couteux que le *.


Pour le 2):
select * from table1 where dateenregistrement= getdate()
(si c'est du TSQL (Microsoft SQL Server ou Sybase)).
0
mon probleme pour le 1 c que il ne reconnait pas la table 2 .
Set rs = db.OpenRecordset ouvre que la table1 de la base1
mais comment comparer les deux tables des 2 bases de donnees .

pour le 2 je vais tous de suite essayer .
0
Si tes 2 bases sont sur le même serveur
et si ton login a les droits en lecture sur les 2 bases,
tu peux faire:

SELECT * FROM base1..table1 Where cléprimaire not in (SELECT cléprimaire FROM base2..table2)

(Note: j'ai bien mis 2 points (..), et non pas un seul).

Par contre, je ne sais pas si ADO gère bien les requêtes inter-bases. En tous cas, en SQL brut de fonderie (ligne de commande), ça passe très bien.
0
Voila ce que sa donne :
Set rs4 = db4.OpenRecordset("select * FROM db..Order_Detail Where Order_Detail_No_Int not in (SELECT NoInt_LigCde from db4..LigCde)")
Sa ne marche pas, je comprends plus rien , il me dit qu'il ne trouve pas le fichier db .

et pour ma question 2 que j'ai essayé ; getdate j'en fais quoi car il me dit operateur absent.qu'est ce que c comme foncyion ?
En fait je voudrais qu'il me prenne en compte la date du jour et que je n'ai pas a rentrer de date tous les jours .

Au fait Merci de m'aider car je suis completement paumé,c la premiere fois que je fais du VB .
En fait je fais une mise a jour d'une base par rapport a une autre base de donnee, tous ca en VB c pas evident.
0
getdate() est une fonction de TSQL (extensions SQL commune à Microsoft SQL Server et sybase).
Pour savoir si ça marche avec ton serveur SQL, ouvre une ligne de commande SQL et tape:
print getdate()
(ne pas oublier les 2 parenthèses).

Si ça ne fonctionne pas, ton serveur SQL possède sûrement une autre commande pour faire la même chose.

Autre solution: prendre la date en VB et construire la requête SQL en passant une date sous forme de texte:

select * from table1 where dateenregistrement= '2001-01-10'
(utilise bien le format de date YYYY-MM-DD, car c'est le seul à ne pas être ambigu pour le serveur SQL).

(Note que je n'ai aucune expérience en VB, seulement du QuickBasic, et je ne connais pas bien ADO du tout).
0
Utilisateur anonyme
10 janv. 2002 à 14:23
Hervé, c'est quoi ta base de données?
0
En fait comme je l'ais dis avant j'ai 2 bases de donnees .
Une sous 4D et l'autre c'est Pivotal.
En fait je fais une mise a jour de la base Pivotal avec les donnees de la base 4D .
La base 4D est en production donc il y a des modifs sans arret, mais pivotal n'est la que pour info; d'ou la necessitée de mise a jour presque en temps reel .
Je fais tous ca par VB et j'utilise des requetes sql pour selectionner mes tables ainsi que les champs a modifier .
0