The Perpetual Newbie - Logg Entry # 8.1This artikkelen først dukket opp på http: //www.undu.comAs du oppdage gledene ved å tillate brukere å gjøre ad hoc-spørringer, også du oppdage at å reagere på sine valg etter faktum er ikke alltid en joy.If du vet ikke hva kolonner kommer til å bli inkludert i søket, har du to måter å takle kolonnene i ettertid. Den første er rå kraft, å sammenligne de faktiske feltnavn med en liste over alle mulige valg og omsette tilsvarende. Alternativt kan du få en felttype informasjon fra Delphi og skrive en stram liten routine.BUT det er én hake. Du skal bruke noen interne Delphi konstanter som ftSmallInt, ftBoolean og ftString. Så naturlig, når du ønsker å få informasjon, vil du sannsynligvis be om ObjectName.fieldType og være rådvill når kompilatoren burps og nekter å fortsette. Det er fordi eiendommen du bør spørre for er datatype. Ja, jeg vet det er forvirrende på hvorfor konstantene ikke kunne ha samme DT som ringer eiendom, men slike anomalier er artikler skrevet her på web.You kan gjøre noen ting med denne koden når du vet hvilken type felt alle kolonner er. Du kan totalt opp en spørring resultat og gjøre noen statistisk analyse. For eksempel sette opp et rutenett og en spørring som er koblet til den. La spørring for å være en slags ad hoc spørring med alle midler du vil. Ha en memo-feltet sitter under rutenettet. Loop gjennom feltene, teller tilfeller av streng felt, totalt numeriske felt og produsere sant /usant totale statistikk fra boolsk felt. Inkluder hver kolonne oppsummering som en linje i memo.My eget bruk var involvert i å skape et spesialisert regneark i Excel, ved hjelp Axolot Datas XLSReadWrite komponent (tilgjengelig på http //www.axolot.com /komponenter /index.htm). Å kunne skille PO-tall som var tidvis ALLE tall som en streng i stedet, tillatt for riktig venstre /høyre begrunnelse av resultatene. Kjerne av funksjonen som gjør som er oppført belowvar Row, Col heltall; s streng, begynner //bare fortsette hvis spørringen Q er aktiv og fylt if ((Q.active) og (Q.recordCount > 0)), og start XLSW.Filename = 'C \\ data \\' + eXLS.Text + ' .xls '; xlsW.OpenFile; Q.first; P = 1; mens ikke Q.eof ikke begynne //skrive kolonneoverskriftene med feltnavnet for Col = 0 til (Q.fieldCount - 1) gjøre xlsW.WriteString (Col, 0,2, store (q.fields [col] .fieldname )); //Sløyfe gjennom kolonnene og eksportere hver celle til XLSReadWrite for Col = 0 til (Q.fieldCount - 1) ikke begynne s = q.fields [Col] .asString; //Bruker feltets datatype eiendom, IKKE fieldType !!!!! //Siden disse er medlemmer av en enumarated sett, kan du bruke en sak ... case q.fields [Col] .dataType av ftSmallInt xlsW.WriteNumber (Col, Row, en, StrToFloat (e)); ftWord xlsW.WriteNumber (Col, Row, en, StrToFloat (e)); ftFloat xlsW.WriteNumber (Col, Row, en, StrToFloat (e)); ftBCD xlsW.WriteNumber (Col, Row, en, StrToFloat (e)); ftInteger xlsW.WriteNumber (Col, Row, en, StrToFloat (e)); ftLargeInt xlsW.WriteNumber (Col, Row, en, StrToFloat (e)); ftBoolean hvis store bokstaver (S) = TRUE //sant avkrysnings deretter xlsW.WriteBool (Col, Row, 3, true) else if store (S) = "falske" //falsk deretter xlsW.WriteBool (Col, Row, 3 , false) ellers xlsW.WriteString (Col, Row, 2, ''); //Alt annet er en streng, inkludert datoer annet xlsW.WriteString (Col, Row, 2, S); slutt; slutt; q.next; P = p + 1; slutt; xlsW.closeFile; end else showDlgOops ('Ingen data å eksportere!'); end; Som jeg vet gåten med å identifisere felttype er et populært spørsmål i de ulike Delphi nyhetsgrupper, håper jeg dette vil lede deg til en løsning på gåten. Og jeg håper det vil oppmuntre deg til å gi din brukere ad hoc spørring evne. De kommer til å elske det! Gary MugfordIdea MechanicBramalea ON Canada Anmeldelser
Hvilken type er det
Previous:Innholdet i RAR file
Next Page:En oversikt over UDP ...