Welche Art es sich handelt!


Die ewigen Anfänger - Protokolleintrag #8.1
Dieser Artikel erschien zuerst auf https://www.undu.com
Entdecken Sie die Freuden des erlauben Benutzern, ad-hoc-Abfragen zu tun, entdecken Sie auch die Reaktion auf ihre Entscheidungen, nachdem die Tatsache nicht immer eine Freude.
Wenn Sie nicht wissen, was Spalten in der Abfrage enthalten sein, haben Sie zwei Möglichkeiten zum Umgang mit den Spalten nach der Tat. Die erste ist die brute-Force, Vergleich der tatsächlichen Feldnamen eine Liste mit allen möglichen Optionen und entsprechend zu reagieren. Alternativ können Sie die Feld-Typinformationen von Delphi erhalten und eine enge kleine Routine zu schreiben.
ABER es gibt einen Haken. Sie werden einige internen Delphi-Konstanten wie FtSmallInt, FtBoolean und FtString verwenden. So natürlich, wenn Sie die Informationen erhalten möchten, Sie werden wahrscheinlich nach ObjectName.fieldType Fragen und verwirrt werden, wenn der Compiler rülpst und weigert sich weiterhin. Deshalb, weil die Eigenschaft, die, der Sie für stellen sollten, Datentyp ist. Ja, ich weiß es ist verwirrend, warum die Konstanten die gleiche DT wie die aufrufende Eigenschaft haben könnte, aber solche Anomalien werden Artikel geschrieben hier im Web.
Sie können einige Dinge mit diesem Code tun, sobald Sie den Typ des Felds wissen, die jede Spalte ist. Sie können insgesamt ein Abfrageergebnis und tun einige statistische Analyse. Zum Beispiel richten Sie ein Raster und eine Abfrage, die mit ihm verbunden. Die Abfrage kann eine Art von ad-hoc-Abfrage mit welchen Mitteln Sie wünschen zu ermöglichen. Haben Sie ein Memo-Feld sitzt unterhalb des Rasters. Durchlaufen Sie die Felder zählen Vorfälle von String-Felder, in Höhe von numerischen Feldern und True/False Gesamtstatistik von boolesche Felder produzieren. Zählen Sie jede Spalte Zusammenfassung als Linie Memo.
Meinen eigenen Gebrauch für das Erstellen einer spezialisierten Kalkulationstabelle in Excel mit Axolot Daten XLSReadWrite Komponente beteiligt war (abrufbar unter http / / www.axolot.com/components/index.htm). Könnend PO Zahlen zu unterscheiden, die gelegentlich alle Nummern als Zeichenfolge statt wurden, erlaubt für korrekte links/rechts-Rechtfertigung der Ergebnisse. Der Kern der Funktion, die das tut ist unten aufgeführt.
var
Zeile, Spalte Ganzzahl;
String s;
beginnen
nur weiter, wenn Abfrage Q aktiv und gefüllt ist
Wenn ((Q.active) und (Q.recordCount > 0))
dann beginnen
XLSW. Filename = 'C\data\' + eXLS.Text + '.xls';
xlsW.OpenFile;
Q.First;
Zeile = 1;
während nicht Q.eof fangen
Schreiben Sie die Spaltenheader mit dem Feldnamen
für Col = 0, (Q.fieldCount - 1) zu tun
xlsW.WriteString(Col,0,2,uppercase(q.fields[col].fieldname));
durchlaufen Sie die Spalten und exportieren jede Zelle in XLSReadWrite
für Col = 0, (Q.fieldCount - 1) fangen

s = q.fields[Col].asString;
Verwenden Sie das Feld Datatype-Eigenschaft, nicht FieldType!!!
Da diese Elemente einer Menge an Enumarated sind, können Sie einen Fall...
RS q.fields[Col].dataType der
FtSmallInt xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtWord xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtFloat xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtBCD xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtInteger xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtLargeInt xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtBoolean wenn Großbuchstaben (S) = 'TRUE' / / true Checkbox
dann xlsW.WriteBool(Col,Row,3,true)
sonst wenn Großbuchstaben (S) = 'FALSE' / / false
dann xlsW.WriteBool(Col,Row,3,false)
sonst xlsW.WriteString (Col, Zeile 2,'');
alles andere ist eine Zeichenfolge, einschließlich Datumsangaben
sonst xlsW.WriteString(Col,Row,2,S);
Ende;
Ende;
q.Next;
Zeile = Zeile + 1;
Ende;
xlsW.closeFile;
Ende
sonst ShowDlgOops ('keine Daten exportieren!');
Ende;
Ich weiß, dass das Rätsel der Identifizierung Feldtyp ist eine beliebte Frage in den verschiedenen Delphi-Newsgroups, hoffe ich, dies wird Sie zu einer Lösung für Ihr Problem lenken. Und ich hoffe, dass es Sie geben Ihre Benutzer ad-hoc-Abfragen Fähigkeit anregen. Sie werden es lieben!
Gary Mugford
Idee-Mechaniker
Bramalea ON Kanada









Welche Art es sich handelt!


Welche Art es sich handelt! : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Die ewigen Anfänger - Protokolleintrag #8.1
Dieser Artikel erschien zuerst auf https://www.undu.com
Entdecken Sie die Freuden des erlauben Benutzern, ad-hoc-Abfragen zu tun, entdecken Sie auch die Reaktion auf ihre Entscheidungen, nachdem die Tatsache nicht immer eine Freude.
Wenn Sie nicht wissen, was Spalten in der Abfrage enthalten sein, haben Sie zwei Möglichkeiten zum Umgang mit den Spalten nach der Tat. Die erste ist die brute-Force, Vergleich der tatsächlichen Feldnamen eine Liste mit allen möglichen Optionen und entsprechend zu reagieren. Alternativ können Sie die Feld-Typinformationen von Delphi erhalten und eine enge kleine Routine zu schreiben.
ABER es gibt einen Haken. Sie werden einige internen Delphi-Konstanten wie FtSmallInt, FtBoolean und FtString verwenden. So natürlich, wenn Sie die Informationen erhalten möchten, Sie werden wahrscheinlich nach ObjectName.fieldType Fragen und verwirrt werden, wenn der Compiler rülpst und weigert sich weiterhin. Deshalb, weil die Eigenschaft, die, der Sie für stellen sollten, Datentyp ist. Ja, ich weiß es ist verwirrend, warum die Konstanten die gleiche DT wie die aufrufende Eigenschaft haben könnte, aber solche Anomalien werden Artikel geschrieben hier im Web.
Sie können einige Dinge mit diesem Code tun, sobald Sie den Typ des Felds wissen, die jede Spalte ist. Sie können insgesamt ein Abfrageergebnis und tun einige statistische Analyse. Zum Beispiel richten Sie ein Raster und eine Abfrage, die mit ihm verbunden. Die Abfrage kann eine Art von ad-hoc-Abfrage mit welchen Mitteln Sie wünschen zu ermöglichen. Haben Sie ein Memo-Feld sitzt unterhalb des Rasters. Durchlaufen Sie die Felder zählen Vorfälle von String-Felder, in Höhe von numerischen Feldern und True/False Gesamtstatistik von boolesche Felder produzieren. Zählen Sie jede Spalte Zusammenfassung als Linie Memo.
Meinen eigenen Gebrauch für das Erstellen einer spezialisierten Kalkulationstabelle in Excel mit Axolot Daten XLSReadWrite Komponente beteiligt war (abrufbar unter http / / www.axolot.com/components/index.htm). Könnend PO Zahlen zu unterscheiden, die gelegentlich alle Nummern als Zeichenfolge statt wurden, erlaubt für korrekte links/rechts-Rechtfertigung der Ergebnisse. Der Kern der Funktion, die das tut ist unten aufgeführt.
var
Zeile, Spalte Ganzzahl;
String s;
beginnen
nur weiter, wenn Abfrage Q aktiv und gefüllt ist
Wenn ((Q.active) und (Q.recordCount > 0))
dann beginnen
XLSW. Filename = 'C\data\' + eXLS.Text + '.xls';
xlsW.OpenFile;
Q.First;
Zeile = 1;
während nicht Q.eof fangen
Schreiben Sie die Spaltenheader mit dem Feldnamen
für Col = 0, (Q.fieldCount - 1) zu tun
xlsW.WriteString(Col,0,2,uppercase(q.fields[col].fieldname));
durchlaufen Sie die Spalten und exportieren jede Zelle in XLSReadWrite
für Col = 0, (Q.fieldCount - 1) fangen

s = q.fields[Col].asString;
Verwenden Sie das Feld Datatype-Eigenschaft, nicht FieldType!!!
Da diese Elemente einer Menge an Enumarated sind, können Sie einen Fall...
RS q.fields[Col].dataType der
FtSmallInt xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtWord xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtFloat xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtBCD xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtInteger xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtLargeInt xlsW.WriteNumber(Col,Row,1,StrToFloat(s));
FtBoolean wenn Großbuchstaben (S) = 'TRUE' / / true Checkbox
dann xlsW.WriteBool(Col,Row,3,true)
sonst wenn Großbuchstaben (S) = 'FALSE' / / false
dann xlsW.WriteBool(Col,Row,3,false)
sonst xlsW.WriteString (Col, Zeile 2,'');
alles andere ist eine Zeichenfolge, einschließlich Datumsangaben
sonst xlsW.WriteString(Col,Row,2,S);
Ende;
Ende;
q.Next;
Zeile = Zeile + 1;
Ende;
xlsW.closeFile;
Ende
sonst ShowDlgOops ('keine Daten exportieren!');
Ende;
Ich weiß, dass das Rätsel der Identifizierung Feldtyp ist eine beliebte Frage in den verschiedenen Delphi-Newsgroups, hoffe ich, dies wird Sie zu einer Lösung für Ihr Problem lenken. Und ich hoffe, dass es Sie geben Ihre Benutzer ad-hoc-Abfragen Fähigkeit anregen. Sie werden es lieben!
Gary Mugford
Idee-Mechaniker
Bramalea ON Kanada


Welche Art es sich handelt!

Welche Art es sich handelt! : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Welche Art es sich handelt!
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung