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

ASP VBscript if statement error (last post)


N1ghtW0lf

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

Δημοσ.

Φτιαχνοντας μια SQL statement σε ενα site που φτιαχνω μου βγαζει error 800a0401, το οποιο κανοντας ενα search στο google, μου λεει πως μαλλον κατι εχω ξεχασει, πχ ";" ή "&".

 

To error που εχω ειναι το ακολουθο...

 

> [font=Arial][size=2]Microsoft VBScript compilation [/size][/font] [font=Arial][size=2]error '800a0401'[/size][/font] 
[font=Arial][size=2]Expected end of statement[/size][/font] 
[font=Arial][size=2]/project/flightsearch.asp[/size][/font][font=Arial][size=2], line 14[/size][/font] 
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)= Request.Form("flyto")) AND ((Flights.departure)=Request.Form("from"))) AND Schedule.FlightDate BETWEEN Request.Form("datebox") AND Request.Form("datebox2");"
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^

Επειδη δεν εχω ιδεα που εχω ξεχασει τι και τι, καθε βοηθεια ειναι ευπροσδεκτη.

Δημοσ.

Αν λάβω υπ όψην την PHP μήπως μπερδεύεται με τα πολλά αυτάκια (" - quotes) που έχεις;

Δοκίμασε όλο με μονά ' και τα μέσα (embed) άστα διπλά.. πχ

 

>Recordset1_cmd.CommandText = 'SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)= Request.Form("flyto")) AND ((Flights.departure)=Request.Form("from"))) AND Schedule.FlightDate BETWEEN Request.Form("datebox") AND Request.Form("datebox2");'

Δημοσ.

Δεν χρησιμοποιω PHP, alla ASP VBscript...

 

 

Θα το τσεκαρω αυτο που μου προτεινεις αργοτερα το βραδυ οταν γυρισω απο σχολη...

 

---------- Post added at 22:41 ----------

 

Τελικα αυτο που μου προτεινεις δεν εχει σχεση...

Δημοσ.

Το ξέρω είναι VB απλα μια ιδέα έριξα που ήταν λάθος :Ρ

Σου δίχνει πάντως που κοντά είναι το error, καλή λύση

Δημοσ.

Δεν εχω ιδεα τι να κανω ρε γμτ...μου λεει που κοντα ειναι η λυση...αλλα δεν ξερω την σωστη συνταξη για τα ampersands για να βρω την ακρη...

Δημοσ.

>
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)= [b]Request.Form("flyto")[/b]) AND ((Flights.departure)=[b]Request.Form("from")[/b])) AND Schedule.FlightDate BETWEEN [b]Request.Form("datebox")[/b] AND [b]Request.Form("datebox2")[/b];"

Έχεις τα αυτάκια σε λάθος θέση. Τα πεδία από την φόρμα σου πρέπει να τα κολλάς στο string Recordset1_cmd.CommandText.Δηλαδή πρέπει να κάνεις αυτό:

>
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)=' "

concatenate με αυτό:

>
Request.Form("flyto")) 

concatenate με αυτό:

>
"' AND ((Flights.departure)=' "

concatenate με αυτό:

>
Request.Form("from")

concatenate με αυτό:

>
")) AND Schedule.FlightDate BETWEEN ' "

concatenate με αυτό:

>
Request.Form("datebox")

concatenate με αυτό:

>
' AND '

concatenate με αυτό:

>
Request.Form("datebox2")

concatenate με αυτό:

>
";"

To concatenate σε string γίνεται με & άρα τελικώς το σωστό είναι να γράψεις:

>
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)=[b]' " &  Request.Form("flyto") & "[/b]) AND ((Flights.departure)=[b]' " & Request.Form("from")& ' "[/b] & )) AND Schedule.FlightDate BETWEEN [b]'" & Request.Form("datebox") &"'[/b] AND [b]'" & Request.Form("datebox2") & "'[/b];"

Πρόσεξε ότι όπου ζητάς από sql κάτι σε char/string /date πρέπει να βάλεις μέσα στο sql string μονά αυτάκια ('). Στa query που έγραψα αφήνω επίτηδες ένα κενό ανάμεσα στα μονά αυτάκια και τα διπλά για να φαίνονται. Προφανώς αυτό το κενό πρέπει να το σβήσεις για να δουλέψει σωστά το query.

Δημοσ.

 

 

>
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)= [b]Request.Form("flyto")[/b]) AND ((Flights.departure)=[b]Request.Form("from")[/b])) AND Schedule.FlightDate BETWEEN [b]Request.Form("datebox")[/b] AND [b]Request.Form("datebox2")[/b];"

Έχεις τα αυτάκια σε λάθος θέση. Τα πεδία από την φόρμα σου πρέπει να τα κολλάς στο string Recordset1_cmd.CommandText.Δηλαδή πρέπει να κάνεις αυτό:

>
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)=' "

concatenate με αυτό:

>
Request.Form("flyto")) 

concatenate με αυτό:

>
"' AND ((Flights.departure)=' "

concatenate με αυτό:

>
Request.Form("from")

concatenate με αυτό:

>
")) AND Schedule.FlightDate BETWEEN ' "

concatenate με αυτό:

>
Request.Form("datebox")

concatenate με αυτό:

>
' AND '

concatenate με αυτό:

>
Request.Form("datebox2")

concatenate με αυτό:

>
";"

To concatenate σε string γίνεται με & άρα τελικώς το σωστό είναι να γράψεις:

>
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)=[b]' " &  Request.Form("flyto") & "[/b]) AND ((Flights.departure)=[b]' " & Request.Form("from")& ' "[/b] & )) AND Schedule.FlightDate BETWEEN [b]'" & Request.Form("datebox") &"'[/b] AND [b]'" & Request.Form("datebox2") & "'[/b];"

Πρόσεξε ότι όπου ζητάς από sql κάτι σε char/string /date πρέπει να βάλεις μέσα στο sql string μονά αυτάκια ('). Στa query που έγραψα αφήνω επίτηδες ένα κενό ανάμεσα στα μονά αυτάκια και τα διπλά για να φαίνονται. Προφανώς αυτό το κενό πρέπει να το σβήσεις για να δουλέψει σωστά το query.

 

Ενταξει...Κωστα...εισαι θεος...σε ευχαριστω ΠΑΡΑ ΠΑΡΑ πολυ.

 

Εχω το εξης προβλημα τωρα...μου βγαζει οτι υπαρχει εξτρα ) στο expression

 

>[font=Arial][size=2]Microsoft Office Access Database Engine[/size][/font] [font=Arial][size=2]error '80040e14'[/size][/font] 
[font=Arial][size=2]Extra ) in query expression '(((Flights.destination)=') AND ((Flights.departure)=' & ))) AND Schedule.FlightDate BETWEEN '' AND '''.[/size][/font] 
[font=Arial][size=2]/project/flightsearch.asp[/size][/font][font=Arial][size=2], line 22[/size][/font] 

Τσεκαρωντας ποια παρενθεση ανοιγει και κλεινει καποια αντιστοιχη δεν βρηκα κατι περιεργο και με εχει προβληματισει...

 

 

EDIT:

 

Βρηκα το λαθος τελικα...και εχω το ακολουθο error message τωρα..

 

>
[font=Arial][size=2]Microsoft Office Access Database Engine[/size][/font] [font=Arial][size=2]error '80040e07'[/size][/font] 
[font=Arial][size=2]Data type mismatch in criteria expression.[/size][/font] 
[font=Arial][size=2]/project/flightsearch.asp[/size][/font][font=Arial][size=2], line 22[/size][/font]
Δημοσ.

για γράψε λίγο το query που σου δίνει αυτό το λάθος. Την γραμμη που το ορίζεις όμως από τον κώδικα σου, και όχι απλά το query δηλαδή κάτι σαν:

>
Recordset1_cmd.CommandText = .......

σε κανα διωράκι που θα γυρίσω θα σου πώ......

 

Α και γράψε και τους τύπους από το table της βάσης δεδομένων σου για τα fields που ψάχνεις...

Δημοσ.
για γράψε λίγο το query που σου δίνει αυτό το λάθος. Την γραμμη που το ορίζεις όμως από τον κώδικα σου, και όχι απλά το query δηλαδή κάτι σαν:

>
Recordset1_cmd.CommandText = .......

σε κανα διωράκι που θα γυρίσω θα σου πώ......

 

Α και γράψε και τους τύπους από το table της βάσης δεδομένων σου για τα fields που ψάχνεις...

 

Αυτο ειναι το expression...

>
Recordset1_cmd.CommandText = "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)='" & Request.Form("flyto") & "') AND ((Flights.departure)='" & Request.Form("from")& "' ))  AND Schedule.FlightDate BETWEEN '" & Request.Form("datebox") &"' AND '" & Request.Form("datebox2") & "';"

Αυτοι ειναι οι τυποι...

Schedule

SchID - Autonumber

FlightDate - Date/Time

FlightID - Number

Capacity - Number

Flights

FlightID - Autonumber

Departure - Text

Destination - Text

departtime - Date/Time

arrivingtime - Date/Time

price - Currency

 

 

Σε ευχαριστω για καθε βοηθεια...

Δημοσ.
τα dateboxes επιστρέφουν σωστά δομημένες ημερομηνίες ?

αν τρέξεις το command χωρίς το between που έχεις εκεί το error συνεχίζει ?

κάνε ένα response.write τι επιστρέφουν αυτά τα 2.

 

Σωστή η παρατήρηση του φίλου. Να προσθέσω 2-3 πραγματάκια:

  • Επειδή υποψιάζομαι ότι η βάση σου είναι σε access, πρέπει να ξέρεις ότι αν έχεις πεδία memo και όχι text πρέπει να τα κάνεις assign σε μια μεταβλητή για να μπορέσεις να τα χρησιμοποιήσεις παραπάνω από μια φορά (αυτό γίνεται όταν διαβάσεις απευθείας από το recordset την τιμή) ψιλοάσχετο αλλά μπορεί να σου χρειαστεί
  • αν η ημερομηνία δεν σου επιστρέφεται σε σωστό format, δες αυτό : http://www.w3schools.com/VBscript/vbscript_ref_functions.asp
  • Επίσης στο query σου, εκεί που βάζεις την ημερομηνία τι format έχεις ορίσει στην Access? Διάλεξε general (μόνο ημερομηνία). Αλλιώς βάλε μετά το π.χ.
    >
    '" & Request.Form("datebox") &"'
    


    το

    >'" & Request.Form("datebox") &[b]" 00:00:00' [/b].....


  • Επίσης κάνε ένα
    >responce.write(Recordset1_cmd.CommandText)


    και δώσε μας το output αυτό, για να δούμε και τι μεταβλητές περνάνε από την φόρμα σου.

Τα λέμε πιο απογευματάκι...

Δημοσ.
τα dateboxes επιστρέφουν σωστά δομημένες ημερομηνίες ?

αν τρέξεις το command χωρίς το between που έχεις εκεί το error συνεχίζει ?

κάνε ένα response.write τι επιστρέφουν αυτά τα 2.

 

Σωστή η παρατήρηση του φίλου. Να προσθέσω 2-3 πραγματάκια:

  • Επειδή υποψιάζομαι ότι η βάση σου είναι σε access, πρέπει να ξέρεις ότι αν έχεις πεδία memo και όχι text πρέπει να τα κάνεις assign σε μια μεταβλητή για να μπορέσεις να τα χρησιμοποιήσεις παραπάνω από μια φορά (αυτό γίνεται όταν διαβάσεις απευθείας από το recordset την τιμή) ψιλοάσχετο αλλά μπορεί να σου χρειαστεί
  • αν η ημερομηνία δεν σου επιστρέφεται σε σωστό format, δες αυτό : http://www.w3schools.com/VBscript/vbscript_ref_functions.asp
  • Επίσης στο query σου, εκεί που βάζεις την ημερομηνία τι format έχεις ορίσει στην Access? Διάλεξε general (μόνο ημερομηνία). Αλλιώς βάλε μετά το π.χ.
    >
    '" & Request.Form("datebox") &"'
    

    το

    >'" & Request.Form("datebox") &[b]" 00:00:00' [/b].....


  • Επίσης κάνε ένα
    >responce.write(Recordset1_cmd.CommandText)

    και δώσε μας το output αυτό, για να δούμε και τι μεταβλητές περνάνε από την φόρμα σου.

Τα λέμε πιο απογευματάκι...

 

 

Παιδια βρηκα το λαθος...ηταν το εξης...

 

>Recordset1_cmd.CommandText =  "SELECT Flights.destination, Flights.departure, Schedule.FlightDate, departtime FROM Flights INNER JOIN Schedule ON Flights.flightid=Schedule.flightID WHERE (((Flights.destination)='" & Request.Form("flyto") & "') AND ((Flights.departure)='" & Request.Form("from")& "' ))  AND Schedule.FlightDate BETWEEN #" & Request.Form("datebox") &"# AND #" & Request.Form("datebox2") & "#;"

ηθελε # αναμεσα στα Request.Form("datebox") kai "datebox2"...

οπως επισης τα dateboxes να ειναι φορματ τυπου "mm/dd/yy" και οχι "dd/mm/yyyy" που ειχα εγω επειδη η ACCESS δεν δεχεται να διαβασει διαφορετικα...

 

Μου εφυγε ο τακος για να το βρω...αλλα νταξει τωρα...νομιζω πως δουλευει...

συντομα σιγουρα, και αλλες ερωτησεις... :-(

 

Σας ευχαριστω ολους για τις βοηθειες σας...

 

ΥΓ. Φιλε Elric_The_Melnibonian τωρα ειδα το ποστ σου...μακαρι να το ειχα δει νωριτερα...σωστοτατος! Ευχαριστω!!!

 

---------- Post added at 23:44 ----------

 

Τωρα εχω το εξης προβλημα...

 

στην επομενη πλεον σελιδα...εμφανιζω ενα table 1χ5 και με περιεχομενο σε καθε column...

1. Checkbox

2. Departure

3. Destination

4. Date

5. Price

 

Τα 4 πρωτα ηταν ευκολα...στο τελευταιο ομως εχω κολλησει...προφανως θα πρεπει να γινει ενα validation για να βγει το σωστο price...και αυτο θα γινει μεσω departure και destination.

 

Εχω γραψει ενα if statement...αλλα επειδη δεν ειμαι και σαινι σιγουρα εχω κανει καποιο λαθος...

 

Αυτο ειναι το if που εχω γραψει:

 

> if (Request.form("from")) AND (Request.form("flyto")) then response.Write Flights.price 

 

To error που μου βγενει ειναι το εξης:

>
[font=Arial][size=2]Microsoft VBScript runtime [/size][/font] [font=Arial][size=2]error '800a000d'[/size][/font] 
[font=Arial][size=2]Type mismatch: '[string: "Athens"]'[/size][/font] 
[font=Arial][size=2]/project/flightsearch.asp[/size][/font][font=Arial][size=2], line 57[/size][/font]
[font=Arial][size=2]

[/size][/font]

Δημοσ.

Εχω γραψει ενα if statement...αλλα επειδη δεν ειμαι και σαινι σιγουρα εχω κανει καποιο λαθος...

 

Αυτο ειναι το if που εχω γραψει:

 

> if (Request.form("from")) AND (Request.form("flyto")) then response.Write Flights.price 

 

To error που μου βγενει ειναι το εξης:

>
[font=Arial][size=2]Microsoft VBScript runtime [/size][/font] [font=Arial][size=2]error '800a000d'[/size][/font] 
[font=Arial][size=2]Type mismatch: '[string: "Athens"]'[/size][/font] 
[font=Arial][size=2]/project/flightsearch.asp[/size][/font][font=Arial][size=2], line 57[/size][/font]
[font=Arial][size=2]

[/size][/font]

 

Το λάθος στου βγαίνει γιατί το "Athens" είναι τύπου string ενώ η if χρειάζεται τύπο Boolean.

Για να ελέγξεις αν έχουν γίνει set τα 2 fields δοκιμασε τα με τις isNull και isEmpty.Εγώ θα έκανα αυτό:

>
fromField=Request.form("from")
flytoField=Request.form("flyto")
if (isNull(fromField)=false and isempty(fromField)=false AND isNull(flytoField)=false and isempty(flytoField)=false) then 
response.Write Flights.price

Πάντως, θα σου πρότεινα πρώτα να κάνεις assign τις τιμές από τα fields σε μεταβλητές και μετά να χρησιμοποιείς αυτές στον κώδικα.

Δημοσ.
Το λάθος στου βγαίνει γιατί το "Athens" είναι τύπου string ενώ η if χρειάζεται τύπο Boolean.

Για να ελέγξεις αν έχουν γίνει set τα 2 fields δοκιμασε τα με τις isNull και isEmpty.Εγώ θα έκανα αυτό:

>
fromField=Request.form("from")
flytoField=Request.form("flyto")
if (isNull(fromField)=false and isempty(fromField)=false AND isNull(flytoField)=false and isempty(flytoField)=false) then 
response.Write Flights.price

Πάντως, θα σου πρότεινα πρώτα να κάνεις assign τις τιμές από τα fields σε μεταβλητές και μετά να χρησιμοποιείς αυτές στον κώδικα.

 

 

Το δοκιμασα το κομματι που εγραψες, βαζοντας και ενα Dim στην αρχη και ενα end if στο τελος για να κλεισει το if και μου βγαζει τωρα error

>[font=Arial][size=2]Microsoft VBScript runtime [/size][/font] [font=Arial][size=2]error '800a01a8'[/size][/font] 
[font=Arial][size=2]Object required: ''[/size][/font] 
[font=Arial][size=2]/project/flightsearch.asp[/size][/font][font=Arial][size=2], line 59[/size][/font] 

 

H 59 line περιεχει το εξης:

>response.Write Flights.price 

Δημοσ.
Το δοκιμασα το κομματι που εγραψες, βαζοντας και ενα Dim στην αρχη και ενα end if στο τελος για να κλεισει το if και μου βγαζει τωρα error

>[font=Arial][size=2]Microsoft VBScript runtime [/size][/font] [font=Arial][size=2]error '800a01a8'[/size][/font] 
[font=Arial][size=2]Object required: ''[/size][/font] 
[font=Arial][size=2]/project/flightsearch.asp[/size][/font][font=Arial][size=2], line 59[/size][/font] 

 

H 59 line περιεχει το εξης:

>response.Write Flights.price 

Αυτός ψάχνει ένα αντικείμενο με όνομα Flights και το property price. Είμαι περίεργος τις άλλες τιμές πως τις ανάθεσες?

Γράψε λίγο το query που σου δίνει το Flights.Price. Και γενικώς γράφε τα queries που σχετίζονται με τα λάθη.

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

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

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