Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
4 août 2009 à 18:18
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
6 août 2009 à 18:11
Bonjour,
Je suis en train de programmé une interface de sélection de données (il faut éviter d'avoir à installer un SGBD avec mon appli final). Pour le moment j'utilise un adodb.Recordset pour stocké mes valeurs et un DataGrid pour les afficher.
Au vue de sa :
objetrecordset#LVI-A-5 URL Qui dit (sur la propriété Filter) :
[...] il s'utilise comme une clause WHERE sans le WHERE. [...]
Je me suis dit "Génial sa vas réglé tout mes problèmes d'un coup". Sauf que ce n'est VRAIMENT pas suffisamment puissant pour ce que je veut faire.
Il n'est même pas possible de mettre : ["Col1" > "Col2"] Je récup l'erreur : "Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit les uns avec les autres." (évidemment les Col1 et Col2 sont de même type )
Existe t'il un autre objet du même genre mais en mieux
Si non une maj d'ADO qui supporterais ce genre de chose existe peut être
HELP PLZ
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé.
Surfez écolo
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 6 août 2009 à 12:09
Bon je pense tenir une solution (il me reste encore à testé tout les opérateurs/fonctions SQL que je doit supporter)
Pour évité d'avoir à installé un SGBD je me suis tourné vers ce qui existe déjà
Ma solution :
Je crée un fichier CSV contenant toute les données de mon recordset. Je m'y connecte avec l'ODBC. Et pouf je n'est plus qu'à ajouter mes tests à la requête de sélection (clause WHERE )
ATTENTION tout de même :
-> J'ai rencontré par le passé quelque problèmes pour me connecter avec cette méthode à des fichier csv contenu dans un dossier nommé avec des espaces.
--> Pour corriger ce problème le plus simple est de crée un fichier DSN (dans un fichier pour évité de pourrir la base de registre ) et de se connecter par son intermédiaire (TestCo.ConnectionString = "FILEDSN= D:\temp\un fichier dsn fonctionne avec des dossiers contenant des espaces\test.dsn")
-> De plus il peut y avoir des problèmes de type (dans le cas ou une colonne est de type texte mais si les n 1éres lignes contienne des valeur pouvant être numérique (exemple "001", alors le type sera détecter comme numérique !)
--> Pour corriger ce problème il faut crée un fichier "schema.ini" dans le même dossier que le fichier CSV.
Exemple de Schema.ini :
J'ai modifier la structure de ma table durant les tests Col1 étant bien de type Integer dans les posts précédant
De plus sa offre plusieurs autres possibilité (semble t'il, il me reste encore pas mal de tests à faire) :
- Changé de délimiteur
- Le nombre de ligne scanné pour détecter le type (enfin je pense)
- Le codage du fichier (ANSI ou OEM) (j'ai un piti panachant pour l'ANSI en ajoutant une couche de Base64 pour permettre l'utilisation de caractères internationaux )
Cette solution me permet en principe de faire ce que je veut maintenant
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 6 août 2009 à 01:42
Salut,
à défaut de pouvoir t' aider autrement, à priori l' erreur:
"Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit les uns avec les autres."
se produit généralement quand les arguments ne sont pas dans l' ordre attendu.
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 6 août 2009 à 09:29
Pas dans l'ordre attendu
Depuis quand il y à un ordre dans les clauses WHERE ? Faut que je révise mon SQL ?
Je viens de tester ["Col2" > "Col1"] et sa marche pas mieux (dommage c'est tout con mais je n'avais pas encore testé).
Bon... bà... Je crois que je vais devoir faire une classe moi même pour que ce genre de choses soit supporté ou prévoir un SGBD à installé avec mon appli
Merci quand même pour ta réponse
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 6 août 2009 à 10:01
C'est encore pire que ce que je croyais.
Même ["Col1" > '1' AND "Col2" >= '2' AND ("Col3" > '1' OR "Col3" < '0')] ne fonctionne pas et me retourne la même erreur (J'ai testé dans tout les ordres possible)
Par contre ["Col1" > '1' OR "Col2" >= '2' OR ("Col3" > '1' OR "Col3" < '0')] fonctionne.
Ce que j'en conclut : plus de ne pas supporté les tests entres colonnes cette saleté d'objet ne supporte pas non plus les enchainement de 'ET' 'OU' avec des parenthèses
Pour aller plus avant j'ai fait encore quelques test :
-> ["Col1" > '1' AND "Col2" >= '2' OR "Col3" > '1'] Fonctionne
-> ["Col3" > '1' OR "Col2" > = '2' AND "Col1" > '1'] Ne fonctionne pas -> [("Col1" > '1' AND "Col2" >= '2') OR "Col3" > '1'] Fonctionne
-> [("Col2" > = '2' OR "Col3" > '1') AND "Col1" > '1'] Ne fonctionne pas -> ["Col1" > '1' AND ("Col2" >= '2' OR "Col3" > '1')] Ne fonctionne pas
Crimobof n'a pas honte de diffusé ce genre d'objet
Heeeeeee si je fessais un truc aussi stable pour mes clients je crois que je me ferais virer relativement rapidement(et j'aurais sans doute du mal à me montré en public ).
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Vous n’avez pas trouvé la réponse que vous recherchez ?
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 6 août 2009 à 18:11
En faite mon rs n'est jamais ouvert (enfin si on veut je fait quand même un open, pour être exacte je fait sa : [rs.Open DecriptionTable, , adOpenStatic, adLockOptimistic] DecriptionTable étant un string crée par une fonction) mais alimenté "à la main". J'ai crée une classe que gère sa. Pour ce faire je me suis fortement inspiré d'une classe posté par Renfield (encore merci à lui )
http://www.vbfrance.com/codes/CREATION-ADODB-RECORDSET-DYNAMIQUEMENT_4929.aspx Je regarderais quand même ce qui est fait exactement dans cette classe (sa fait déjà qq temps que je l'es fini) mais je continue de pensé que sa viens de l'objet rs qui à des GROS manque niveau filter.
De toute façon je pense gardé la solution que j'ai validé plus haut (je n'es aucune restriction vis à vis de la création de fichier temp, à condition bien sur de les supprimer une fois qu'ils sont devenu inutile)
Bonne soirée
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo