Μέλας Κύων Δημοσ. 28 Σεπτεμβρίου 2010 Δημοσ. 28 Σεπτεμβρίου 2010 Δουλεύω με 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; Ξέρει κάποιος να μου πει;
random Δημοσ. 28 Σεπτεμβρίου 2010 Δημοσ. 28 Σεπτεμβρίου 2010 εγώ το 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"
taazz Δημοσ. 28 Σεπτεμβρίου 2010 Δημοσ. 28 Σεπτεμβρίου 2010 Βασικά το προβλήμα στον κωδικά σου είναι οτι αφήνεις κενό μετα τον ψαρακτήρα ":" όπως ανάφεραι ο random. Η δέσμη αντολών sql.add('χχχχχχχ') sql.add('yyyyyyyy') ισοδυναμεί με sql.add('χχχχχχχ'+#13#10+'yyyyyyyy'') διότι to sql είναι κλάση τύπου stringlist οπότε κάθε add προσθέτει και ένα νέο string στην λιστα. Εχω τροφοδοτήσει πολλήπλοκα sql στα ADO αντικείμενα χωρίς πρόβλημα. Αλλά το βασικό είναι ποιον SQL server χρησιμοποιείς και το αν μπορεί να καταλάβει EOL των windows ή θα έπρεπε να αποφύγεις την χρήση τους.
Μέλας Κύων Δημοσ. 29 Σεπτεμβρίου 2010 Μέλος Δημοσ. 29 Σεπτεμβρίου 2010 Τελικά το πάλεψα και το βρήκα .. SQL.Add('SELECT * FROM myTable' + ' WHERE pedio1 = prmPedio1' + ' AND pedio2 = prmPedio2'); // οχι = : τελικα Ευχαριστώ για τη βοήθεια και τους δυο σας.
taazz Δημοσ. 29 Σεπτεμβρίου 2010 Δημοσ. 29 Σεπτεμβρίου 2010 Kαι παίζει το parambyname? Δεν νομίζω ότι δουλεύει με αυτο τον τρόπο αφού το parambyname διαχειρίζεται client side ονοματα μεταβλητών και υποστηρίζονται διαφορετικά από server σε server. Μάλλον κάτι σου διαφεύγει.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.