De quel type est-il!


L'éternel Débutant - Entrée de Journal #8.1
Cet article est d'abord paru sur http://www.undu.com
Comme vous découvrez les joies de la permettant aux utilisateurs d'effectuer des requêtes ad hoc, vous découvrirez également que la réponse à leur choix après le fait n'est pas toujours une joie.
Si vous ne savez pas QUELLES colonnes seront inclus dans la requête, vous avez deux façons de composer avec les colonnes après le fait. La première est la force brute, en comparant les noms de champ avec une liste de tous les choix possibles et de réagir en conséquence. Alternativement, vous pouvez obtenir le type de champ de l'information de Delphes et d'écrire un peu serré routine.
MAIS il ya un hic. Vous serez utilisant certains internes Delphi constantes comme ftSmallInt, ftBoolean et ftString. Alors, naturellement, quand vous voulez obtenir de l'information, vous vous demandez sans doute pour ObjectName.fieldType et être perplexe lorsque le compilateur rots et refuse de continuer. C'est parce que la propriété, vous DEVEZ demander est de Type de données. Oui, je sais que c'est confus quant à pourquoi les constantes ne pouvait pas avoir la même DT à l'appel de la propriété, mais de telles anomalies sont des articles écrits ici sur le web.
Vous pouvez faire certaines choses avec ce code, une fois que vous connaissez le type de champ d'une colonne. Vous pouvez total du résultat d'une requête et de faire une analyse statistique. Par exemple, mettre en place une grille et une requête connecté. Permettre à la requête d'être une sorte de requête ad hoc par quelque moyen que ce soit que vous voulez. Ont un champ mémo assis sous la grille. Boucle à travers les champs, en comptant les incidents de champs de type chaîne, pour un total de champs numériques et la production de Vrai/Faux de l'ensemble des stats à partir des champs booléens. Inclure chaque colonne est résumé comme une ligne dans le mémo.
Mon propre usage a été impliqué dans la création d'une institution spécialisée de feuille de calcul dans Excel, à l'aide Axolot Données du XLSReadWrite composant (disponible à l'http//www.axolot.com/components/index.htm). Être capable de différencier PO numéros de temps en temps TOUS les nombres comme une chaîne de caractères au lieu de cela, a permis de les gauche/droite et la justification des résultats. L'essentiel de la fonction qui n'est indiquée ci-dessous
var
& nbsp & nbsp Ligne,Col entier
& nbsp & nbsp chaîne
begin
& nbsp & nbsp // ne peut continuer que si une requête Q est actif et rempli
& nbsp & nbsp si ((Q. active) et (Q. recordCount > 0))
& ! & ! & ! & nbsp puis commencer
& ! & ! & ! & ! & ! & nbsp XLSW.Filename = 'C\data\' eXLS.Le texte'.xls'
& ! & ! & ! & ! & ! & nbsp xlsW.OpenFile
& ! & ! & ! & ! & ! & nbsp Q. premier
& ! & ! & ! & ! & ! & nbsp Row = 1
& ! & ! & ! & ! & ! & nbsp alors que pas Q. eof do begin
& ! & ! & ! & ! & ! & ! & ! & nbsp // écrire les en-têtes de colonne avec le nom de champ
& ! & ! & nbsp & ! & ! & ! & ! & nbsp Col = 0 pour (Q. fieldCount - 1)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp xlsW.WriteString(Col,0,2,majuscules(q.champs[col].fieldname))
& ! & ! & ! & ! & ! & ! & ! & nbsp // boucle sur les colonnes et l'exportation dans chaque cellule pour XLSReadWrite
& ! & ! & ! & ! & ! & ! & ! & nbsp Col = 0 pour (Q. fieldCount - 1) do begin

& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp s = q.champs[Col].asString
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // utilisez le champ de la propriété type de données, PAS fieldType!!!!!
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // puisque ce sont les membres d'une enumarated, vous pouvez utiliser un Cas...
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp cas, q.champs[Col].type de données
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftSmallInt xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftWord xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftFloat xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftBCD xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftInteger xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftLargeInt xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftBoolean si les majuscules(S) = 'TRUE' // true case
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis xlsW.WriteBool(Col,Ligne 3,true)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp else if majuscule(S) = 'FALSE' / / false
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis xlsW.WriteBool(Col,Ligne 3,false)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp autre xlsW.WriteString(Col,Ligne 2,')
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // tout le reste est une chaîne de caractères, y compris les dates
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp autre xlsW.WriteString(Col,Ligne 2,S)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp q.suivant
& ! & ! & ! & ! & ! & ! & ! & nbsp Ligne = Ligne 1
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp xlsW.closeFile
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp autre showDlgOops ('Pas de données pour l'exportation!')
fin
Comme je sais que l'énigme de l'identification du type de champ est une question populaire dans les différents Delphi groupes de discussion, j'espère que cela va vous orienter vers une solution à votre problème. Et j'espère que cela vous encouragera à donner à vos utilisateurs ad hoc interroger la capacité. Ils vont adorer!
Gary Mugford
l'Idée de Mécanicien
Bramalea SUR Canada









De quel type est-il!


De quel type est-il! : Plusieurs milliers de conseils pour vous faciliter la vie.


L'eternel Debutant - Entree de Journal #8.1
Cet article est d'abord paru sur http://www.undu.com
Comme vous decouvrez les joies de la permettant aux utilisateurs d'effectuer des requetes ad hoc, vous decouvrirez egalement que la reponse a leur choix apres le fait n'est pas toujours une joie.
Si vous ne savez pas QUELLES colonnes seront inclus dans la requete, vous avez deux façons de composer avec les colonnes apres le fait. La premiere est la force brute, en comparant les noms de champ avec une liste de tous les choix possibles et de reagir en consequence. Alternativement, vous pouvez obtenir le type de champ de l'information de Delphes et d'ecrire un peu serre routine.
MAIS il ya un hic. Vous serez utilisant certains internes Delphi constantes comme ftSmallInt, ftBoolean et ftString. Alors, naturellement, quand vous voulez obtenir de l'information, vous vous demandez sans doute pour ObjectName.fieldType et etre perplexe lorsque le compilateur rots et refuse de continuer. C'est parce que la propriete, vous DEVEZ demander est de Type de donnees. Oui, je sais que c'est confus quant a pourquoi les constantes ne pouvait pas avoir la meme DT a l'appel de la propriete, mais de telles anomalies sont des articles ecrits ici sur le web.
Vous pouvez faire certaines choses avec ce code, une fois que vous connaissez le type de champ d'une colonne. Vous pouvez total du resultat d'une requete et de faire une analyse statistique. Par exemple, mettre en place une grille et une requete connecte. Permettre a la requete d'etre une sorte de requete ad hoc par quelque moyen que ce soit que vous voulez. Ont un champ memo assis sous la grille. Boucle a travers les champs, en comptant les incidents de champs de type chaîne, pour un total de champs numeriques et la production de Vrai/Faux de l'ensemble des stats a partir des champs booleens. Inclure chaque colonne est resume comme une ligne dans le memo.
Mon propre usage a ete implique dans la creation d'une institution specialisee de feuille de calcul dans Excel, a l'aide Axolot Donnees du XLSReadWrite composant (disponible a l'http//www.axolot.com/components/index.htm). Etre capable de differencier PO numeros de temps en temps TOUS les nombres comme une chaîne de caracteres au lieu de cela, a permis de les gauche/droite et la justification des resultats. L'essentiel de la fonction qui n'est indiquee ci-dessous
var
& nbsp & nbsp Ligne,Col entier
& nbsp & nbsp chaîne
begin
& nbsp & nbsp // ne peut continuer que si une requete Q est actif et rempli
& nbsp & nbsp si ((Q. active) et (Q. recordCount > 0))
& ! & ! & ! & nbsp puis commencer
& ! & ! & ! & ! & ! & nbsp XLSW.Filename = 'C\data\' eXLS.Le texte'.xls'
& ! & ! & ! & ! & ! & nbsp xlsW.OpenFile
& ! & ! & ! & ! & ! & nbsp Q. premier
& ! & ! & ! & ! & ! & nbsp Row = 1
& ! & ! & ! & ! & ! & nbsp alors que pas Q. eof do begin
& ! & ! & ! & ! & ! & ! & ! & nbsp // ecrire les en-tetes de colonne avec le nom de champ
& ! & ! & nbsp & ! & ! & ! & ! & nbsp Col = 0 pour (Q. fieldCount - 1)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp xlsW.WriteString(Col,0,2,majuscules(q.champs[col].fieldname))
& ! & ! & ! & ! & ! & ! & ! & nbsp // boucle sur les colonnes et l'exportation dans chaque cellule pour XLSReadWrite
& ! & ! & ! & ! & ! & ! & ! & nbsp Col = 0 pour (Q. fieldCount - 1) do begin

& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp s = q.champs[Col].asString
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // utilisez le champ de la propriete type de donnees, PAS fieldType!!!!!
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // puisque ce sont les membres d'une enumarated, vous pouvez utiliser un Cas...
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp cas, q.champs[Col].type de donnees
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftSmallInt xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftWord xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftFloat xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftBCD xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftInteger xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftLargeInt xlsW.WriteNumber(Col,Ligne 1,StrToFloat(s))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ftBoolean si les majuscules(S) = 'TRUE' // true case
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis xlsW.WriteBool(Col,Ligne 3,true)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp else if majuscule(S) = 'FALSE' / / false
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp puis xlsW.WriteBool(Col,Ligne 3,false)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp autre xlsW.WriteString(Col,Ligne 2,')
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // tout le reste est une chaîne de caracteres, y compris les dates
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp autre xlsW.WriteString(Col,Ligne 2,S)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp q.suivant
& ! & ! & ! & ! & ! & ! & ! & nbsp Ligne = Ligne 1
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp xlsW.closeFile
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp autre showDlgOops ('Pas de donnees pour l'exportation!')
fin
Comme je sais que l'enigme de l'identification du type de champ est une question populaire dans les differents Delphi groupes de discussion, j'espere que cela va vous orienter vers une solution a votre probleme. Et j'espere que cela vous encouragera a donner a vos utilisateurs ad hoc interroger la capacite. Ils vont adorer!
Gary Mugford
l'Idee de Mecanicien
Bramalea SUR Canada


De quel type est-il!

De quel type est-il! : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation