MS SQL και ελληνικά

Συζητήσεις για τον Microsoft SQL Server

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
dimoss
Δημοσιεύσεις: 8
Εγγραφή: 04 Ιουν 2006 18:05

MS SQL και ελληνικά

Δημοσίευση από dimoss » 04 Ιουν 2006 18:06

Γεια σας,

Έχω ένα παράξενο πρόβλημα με μια εφαρμογή που έχω φτιάξει για αναζήτηση βάσει κριτηρίων (δημιουργία ενός @WhereString το οποίο περνάει με Session και "τραβάει" τα δεδομένα από μια βάση MS-SQL).
Ενώ όλα λειτουργούν κανονικά σε τοπικό επίπεδο (εννοώ στον τοπικό SQL SERVER), αφού κάνω import το table και την store procedure στον SQL του provider η εφαρμογή δεν δουλεύει βγάζοντας "Incorrect syntax" error.

- Το collation είναι το ίδιο και στις δύο βάσεις: Greek_CI_AS
- Οι κολώνες με κείμενο είναι τύπου: nvarchar

Παρακάτω σας δίνω τον κώδικα των:

1. Store Procedure:

CREATE Procedure sp_search
@WhereString nvarchar(500)

AS

Declare @SQL nvarchar(2500)

SELECT @SQL = ' SELECT * ' +
' FROM te ' +
' WHERE nomarxia is not null ' + @WhereString +
' ORDER BY pinakas ASC, entopiotita, m_total DESC, m_vathmos_ptixio DESC, m_2o_ptixio DESC, m_programa_oaed DESC, m_sinafes_phd DESC, m_all_phd DESC,
m_sinafes_master DESC, m_allo_master DESC, empeiria_total DESC, empeiria_50 DESC, m_glosses DESC, etos_ptixio ASC '

Exec (@SQL)
GO

2. Φόρμα

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1253"%>
<%Session.CodePage= 1253%>
<!--#include file="asep.asp" -->
<%
Session("WhereString") = ""
%>
<% Dim WhereString

If Request.Form("nomarxia") <> "0" THEN WhereString = WhereString & " AND te.nomarxia = '" & Request.Form("nomarxia") & "'" END IF

If Request.Form("klados") <> "0" THEN WhereString = WhereString & " AND te.klados = '" & Request.Form("klados") & "'" END IF

IF Request.Form("politeknos") = "1" THEN WhereString = WhereString & "AND te.politeknos = 'Ν'" END IF

IF Request.Form("palino") = "1" THEN WhereString = WhereString & "AND te.palino = 'Ν'" END IF

IF Request.Form("empeiria1") = "1" THEN WhereString = WhereString & "AND te.empeiria_total >= 1" END IF

IF Request.Form("empeiria0") = "1" THEN WhereString = WhereString & "AND te.empeiria_total = 0" END IF

WhereString = WhereString
Session("WhereString") = WhereString
If Request.Form("submit") <> "" THEN Response.redirect "list.asp"
%>

....και ακολουθεί μια normal φόρμα ή οποία κάνει action στην ίδια σελίδα

-----------------------------------------------------------------------------------------------
Τα παραπάνω δουλεύουν ρολόϊ τοπικά ενώ βγάζουν μήνυμα λάθους στο online

Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near '&#216;&#236;'.

/asep/te/list.asp, line 21

Από το μήνυμα καταλαβαίνω ότι κάτι τρέχει με τα ελληνικά, αλλά δεν μπορώ να καταλάβω τι...
Μήπως κάποιος μπορεί να βοηθήσει?

Το url είναι...www.tabletennis.gr/asep/te/

Ευχαριστώ προκαταβολικά.

Υ.Γ. Να σημειώσω επίσης ότι δοκίμασα να βάλω και το περιβόητο N
για παράδειγμα
If Request.Form("nomarxia") <> "0" THEN WhereString = WhereString & " AND te.nomarxia = Ν'" & Request.Form("nomarxia") & "'" END IF

...αλλά τίποτε..

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

MS SQL και ελληνικά

Δημοσίευση από dva_dev » 04 Ιουν 2006 20:15

Θα πρότεινα να κάνεις ένα Response.Write (WhereString) για να δείς τι query παράγεται.
Εμένα μου βγάζει αυτό το λάθος:
Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near '&#216;&#236;S'.

/asep/te/list.asp, line 20
Η γραμμή 20 του list.asp ποιά είναι;

dimoss
Δημοσιεύσεις: 8
Εγγραφή: 04 Ιουν 2006 18:05

MS SQL και ελληνικά

Δημοσίευση από dimoss » 04 Ιουν 2006 22:34

set rsASEP = Command1.Execute

Ουσιαστικά είναι το execution

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

MS SQL και ελληνικά

Δημοσίευση από dva_dev » 05 Ιουν 2006 00:27

Το sql statement που εκτελείται από το Command1 ποιό είναι;
Το WhereString τι τιμή έχει;

dimoss
Δημοσιεύσεις: 8
Εγγραφή: 04 Ιουν 2006 18:05

MS SQL και ελληνικά

Δημοσίευση από dimoss » 05 Ιουν 2006 00:47

dva_dev έγραψε:Το sql statement που εκτελείται από το Command1 ποιό είναι;
Το WhereString τι τιμή έχει;
To WhereString δημιουργείται on the fly ανάλογα με το τι επιλέγει ο χρήστης στην φόρμα και φτιάχνεται το query.

To command1 ειναι στην ουσια το store procedure

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

MS SQL και ελληνικά

Δημοσίευση από dva_dev » 05 Ιουν 2006 00:54

Κάτι είναι λάθος στη δημιουργία του WhereString.
Επέλεξε μόνο Νομαρχία->ΑΘΗΝΩΝ και κοίταξε τι περιέχει το where statement, και τι λέει το sql command.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

MS SQL και ελληνικά

Δημοσίευση από dva_dev » 05 Ιουν 2006 01:25

Ξανακοίτα τον κώδικα σου και βάλε ένα κενό πριν το AND παντού στο:

Κώδικας: Επιλογή όλων

...WhereString = WhereString & " AND ...
σε κάποια λείπει.
Επίσης στα combo boxes Νομαρχία και Κλάδος εκεί που ορίζεις ποιά επιλογή είναι selected βάλε και value="0", αφού το χρησιμοποιείς στον κώδικα σου.

dimoss
Δημοσιεύσεις: 8
Εγγραφή: 04 Ιουν 2006 18:05

MS SQL και ελληνικά

Δημοσίευση από dimoss » 05 Ιουν 2006 19:12

dva_dev έγραψε:Ξανακοίτα τον κώδικα σου και βάλε ένα κενό πριν το AND παντού στο:

Κώδικας: Επιλογή όλων

...WhereString = WhereString & " AND ...
σε κάποια λείπει.
Επίσης στα combo boxes Νομαρχία και Κλάδος εκεί που ορίζεις ποιά επιλογή είναι selected βάλε και value="0", αφού το χρησιμοποιείς στον κώδικα σου.
Τα διόρθωσα όλα όπως είπες αλλά το πρόβλημα συνεχίζεται..
Έφτιαξα ένα trace table για να δω τι περνάει από το string και είδα τα εξής:

Τοπικά
SELECT * FROM te WHERE nomarxia is not null AND nomarxia = N'ΑΘΗΝΩΝ' AND klados = N'ΤΕ5' ORDER BY pinakas ASC, entopiotita, m_total DESC, m_vathmos_ptixio DESC, m_2o_ptixio DESC, m_programa_oaed DESC, m_sinafes_phd DESC, m_all_phd DESC,
m_sinafes_master DESC, m_allo_master DESC, empeiria_total DESC, empeiria_50 DESC, m_glosses DESC, etos_ptixio ASC

Όπως βλεπεις τοπικά περνάνε όλα μια χαρά και παίρνω να αποτελέσματα που θέλω.

Online
SELECT * FROM te WHERE nomarxia is NOT NULL AND nomarxia = N'&#193;&#200;&#199;&#205;&#217;&#205;' AND klados = N'&#212;&#197;5' ORDER BY pinakas ASC, entopiotita, m_total DESC, m_vathmos_ptixio DESC, m_2o_ptixio DESC, m_programa_oaed DESC, m_sinafes_phd DESC, m_all_phd DESC,
m_sinafes_master DESC, m_allo_master DESC, empeiria_total DESC, empeiria_50 DESC, m_glosses DESC, etos_ptixio ASC

Εδώ βλεπεις ότι το nomarxia και το klados βγάζουν κινέζικα.

Το encoding και στα δύο ειναι CODEPAGE="28597"

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

MS SQL και ελληνικά

Δημοσίευση από dva_dev » 05 Ιουν 2006 19:56

Σου έστειλα ένα test που έκανα με pm. Δοκίμασε το.

Απάντηση

Επιστροφή στο “MS SQL Server”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες