Προς το περιεχόμενο

delphi 2007 - σύνθετο ερώτημα SQL


Μέλας Κύων

Προτεινόμενες αναρτήσεις

Δημοσ.

Δουλεύω με delphi 2007 κι έχω ένα πρόβλημα για το πως θα θέσω σύνθετα ερωτήματα σε μια Β.Δ. με ADO. O παρακάτω κώδικας μου δίνει αποτελέσματα με απλό ερώτημα όταν θέτω τιμή σε πλαίσιο κειμένου αναζήτησης:

 

with ADOQuery1 do begin

close;

SQL.Clear;

 

SQL.Add('SELECT * FROM myTable WHERE pedio1 = : prmPedio1');

parameters.ParamByName('prmPedio1').Value := Edit1.Text;

open;

 

end;

 

Ομως όταν θέλω να αναζητήσω αποτελέσματα από 2 ή και παραπάνω πλαίσια κειμένου , δε μπορεσα να βρω άκρη αφου πειραματίστικα πολλές φορές όπως :

 

with ADOQuery1 do begin

close;

SQL.Clear;

 

SQL.Add('SELECT * FROM myTable WHERE pedio1 = : prmPedio1');

SQL.Add('AND pedio2 = : prmPedio2');

parameters.ParamByName('prmPedio1').Value := Edit1.Text;

parameters.ParamByName('prmPedio2').Value := Edit2.Text;

open;

 

end;

 

Ξέρει κάποιος να μου πει;

Δημοσ.

εγώ το SQL.Add, θα το έγραφα σε μία γραμμή:

> 
SQL.Add('SELECT * FROM myTable WHERE pedio1 = :prmPedio1 AND pedio2 = :prmPedio2');



ή αν σου φαινεται μεγαλο το query.. κάπως έτσι:
SQL.Add('SELECT * FROM myTable'
          + ' WHERE pedio1 = :prmPedio1'
          + ' AND pedio2 = :prmPedio2');

 

 

 

αν επιμενεις στο δικο σου τρόπο....

πιθανόν:

στο SQL.Add('AND pedio2 = : prmPedio2'); να θέλει ενα space πριν το AND,

 

και να μην βαζεις space μετα τα ":"

στα ": prmPedio1" και ": prmPedio2"

Δημοσ.

Βασικά το προβλήμα στον κωδικά σου είναι οτι αφήνεις κενό μετα τον ψαρακτήρα ":" όπως ανάφεραι ο random. Η δέσμη αντολών

 

sql.add('χχχχχχχ')

sql.add('yyyyyyyy')

 

ισοδυναμεί με

 

sql.add('χχχχχχχ'+#13#10+'yyyyyyyy'')

 

διότι to sql είναι κλάση τύπου stringlist οπότε κάθε add προσθέτει και ένα νέο string στην λιστα.

 

 

Εχω τροφοδοτήσει πολλήπλοκα sql στα ADO αντικείμενα χωρίς πρόβλημα. Αλλά το βασικό είναι ποιον SQL server χρησιμοποιείς και το αν μπορεί να καταλάβει EOL των windows ή θα έπρεπε να αποφύγεις την χρήση τους.

Δημοσ.

Kαι παίζει το parambyname? Δεν νομίζω ότι δουλεύει με αυτο τον τρόπο αφού το parambyname διαχειρίζεται client side ονοματα μεταβλητών και υποστηρίζονται διαφορετικά από server σε server. Μάλλον κάτι σου διαφεύγει.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...