Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS-SQL Abfrageproblem (https://www.delphipraxis.net/84439-ms-sql-abfrageproblem.html)

emsländer 16. Jan 2007 23:34

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

MS-SQL Abfrageproblem
 
Moin,

folgendes Problem läßt mir nun noch mehr graue Haare wachsen:

Delphi-Quellcode:
  _query := TADOquery.Create(nil);
  with _query do begin
    try
      datasource := frmmain.DataSource1;
      with parameters.AddParameter do begin
 
        Name := 'xdauer';
        DataType := ftstring;
        Value := _dauer;

        Name := 'xtn';
        DataType   := ftString;
        Value   := _tn;
      end;
      connection := frmmain.ADOConnection1;

      sql.text := 'select count (*) as anzahl from tkanlage where (tn = :xtn) and (dauer = :xdauer)';
      open;
      _anz := FieldByName('Anzahl').AsInteger;
      close;
      showmessage(inttostr(_anz));  
    finally
      //Free;
    end;
  end;
  freeandnil(_query);
Dem Datenbankinhalt nach MUSS _anz = 2 sein. (Ich habe die Quellen manuell doppelt hineinkopiert und auch validiert). Das Datenbankfeld tn ist Char(3) und dauer ist Char(acht). Wenn ich eine einzelne Abfrage auf tn mache, bekomme ich irgendwas um 420 angezeigt(passt auch), auf dauer bekomme ich 2 (auch ok). Mache ich aber die Kombi, gibts 0.

Kann mir mal jemand das Brett vom Kopf nehmen?

Achja, und um das ganze noch schwieriger zu machen, wenn das denn mal funktionieren sollte, muss noch auf datetime abgefragt werden, was im Moment auch allein gänzlich versagt:

Delphi-Quellcode:
Name := 'xdatum';
        DataType := ftdatetime;
        Value := stmp;    // Bestehend aus Datum + ' ' + Uhrzeit (Format 22:11:00)
        // das Datenbankfeld dazu ist Datetime
Gruss

EL

mikhal 17. Jan 2007 05:33

Re: MS-SQL Abfrageproblem
 
Die Datentypen sind definitv CHAR? Dann solltest du daran denken, dass deine Parameter auch tatsächlich die vorgegebene Länge haben müssen! CHAR hat immer die vorgegebene Länge, wird immer mit Leerzeichen aufgefüllt.

Wenn du variable String-Längen benutzen willst, dann solltest du VARCHAR verwenden.

Die nächste mögliche Falle sind NCHAR bzw. NVARCHAR für 16-Bit Zeichensätze...

Grüße
Mikhal

mkinzler 17. Jan 2007 05:37

Re: MS-SQL Abfrageproblem
 
Ersetzte mal den Asterix durch die Bezeichnung des PK
SQL-Code:
select count (<pk>) as anzahl from tkanlage where (tn = :xtn) and (dauer = :xdauer)

emsländer 17. Jan 2007 07:56

Re: MS-SQL Abfrageproblem
 
Zitat:

Zitat von mikhal
Die Datentypen sind definitv CHAR? Dann solltest du daran denken, dass deine Parameter auch tatsächlich die vorgegebene Länge haben müssen! CHAR hat immer die vorgegebene Länge, wird immer mit Leerzeichen aufgefüllt.

Wenn du variable String-Längen benutzen willst, dann solltest du VARCHAR verwenden.

Die nächste mögliche Falle sind NCHAR bzw. NVARCHAR für 16-Bit Zeichensätze...

Grüße
Mikhal

werde ich tun


Danke


Gruß

EL

emsländer 17. Jan 2007 07:57

Re: MS-SQL Abfrageproblem
 
Zitat:

Zitat von mkinzler
Ersetzte mal den Asterix durch die Bezeichnung des PK
SQL-Code:
select count (<pk>) as anzahl from tkanlage where (tn = :xtn) and (dauer = :xdauer)

Was bedeutet der "PK" ?


Gruß

EL

mkinzler 17. Jan 2007 07:59

Re: MS-SQL Abfrageproblem
 
Zitat:

Was bedeutet der "PK" ?
Primary Key = Primärschlüssel

emsländer 17. Jan 2007 08:42

Re: MS-SQL Abfrageproblem
 
Zitat:

Zitat von mkinzler
Zitat:

Was bedeutet der "PK" ?
Primary Key = Primärschlüssel

:wall: :wall: :wall:


Gruß

EL


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz