Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ASP+ADO форматы данных. / 13 сообщений из 13, страница 1 из 1
23.10.2002, 10:11:54
    #32061047
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
ТАкая проблема. Есть процедура по поиску данных в таблице. Сделана довольно просто

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE  procedure dbo.findcustomers

@Company    nvarchar( 100 ),
@NameID     nvarchar( 20 ),
@Address    nvarchar( 100 ),
@City       nvarchar( 50 )
as
select   CustomerID,
	 NameID,
	 Company,
          Address,
          City,

from customers c

where  c.Company like '%'+@Company+'%'
and     c.NameID 	like '%'+@NameID+'%'
and     c.Address 	like '%'+@Address+'%'
and     c.City	like '%'+@City+'%'


и соответственно asp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
<%dim connect, rs, cmd
dim sid
sid= " " 
dim sCompany, sNameID, sAddress, sCity
sCompany=Request( "Company" )( 1 )
sNameID=Request( "NameID" )( 1 )
sAddress=Request( "Address" )( 1 )
sCity=Request( "City" )( 1 )
set connect=Server.CreateObject( "ADODB.Connection" )
connect.ConnectionTimeout= 15 
connect.CommandTimeout= 10 
connect.Open  "Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Test;Data Source=SQL\TEST;Use Procedure for Prepare=1 ;Auto Translate=True;Packet Size= 4096 ;Use Encryption for Data=False;Tag with column collation when possible=False"


set cmd=Server.CreateObject( "ADODB.Command" )
cmd.CommandType=adCmdStoredProc
cmd.CommandText= "findcustomers" 
cmd.ActiveConnection=connect

cmd.Parameters.Append cmd.CreateParameter( "Company" ,adVarWChar,adParamInput, 100 ,sCompany)
cmd.Parameters.Append cmd.CreateParameter( "NameID" ,adVarWChar,adParamInput, 100 ,sNameID)
cmd.Parameters.Append cmd.CreateParameter( "Address" ,adVarWChar,adParamInput, 100 ,sAddress)
cmd.Parameters.Append cmd.CreateParameter( "City" ,adVarWChar,adParamInput, 50 ,sCity)

set rs=cmd.Execute

%>


<! -- îñíîâíàÿ òàáëèöà -->
 

<table border= "0 " cellpadding= "4 " cellspacing= "2 " width= "600 ">


<tr>
<td bgcolor= "#e0e0e0"  class= "zagolovok" > 205 ; 238 ; 236 ; 229 ; 240 ;</td>
<td bgcolor= "#e0e0e0"  class= "zagolovok" > 199 ; 224 ; 234 ; 224 ; 231 ; 247 ; 232 ; 234 ;</td>
<td bgcolor= "#e0e0e0"  class= "zagolovok" > 202 ; 238 ; 236 ; 239 ; 224 ; 237 ; 232 ; 255 ;</td>
<td bgcolor= "#e0e0e0"  class= "zagolovok" > 195 ; 238 ; 240 ; 238 ; 228 ;</td>
<td bgcolor= "#e0e0e0"  class= "zagolovok" > 210 ; 229 ; 235 ; 229 ; 244 ; 238 ; 237 ;</td>
<td bgcolor= "#e0e0e0"  class= "zagolovok"  align= "center"  colspan= "2 "></td>
</tr>


<%
while not rs.EOF
sid=rs.Fields( "NameID" ).value
%>


<tr>
<td bgcolor= "#e0e0e0"  class= "tables" ><%=rs.Fields( "CustomerID" ).value%></td>
<td bgcolor= "#e0e0e0"  class= "tables" ><a href= "infocustomers.asp?id=<%=sid%>" ><font size= "-2 "><%=rs.Fields( "NameID" ).value%></font></a></td>
<td bgcolor= "#e0e0e0"  class= "tables" ><%=rs.Fields( "Company" ).value%></td>
<td bgcolor= "#e0e0e0"  class= "tables" ><%=rs.Fields( "City" ).value%></td>
<td bgcolor= "#e0e0e0"  class= "tables" ><%=rs.Fields( "Phone1" ).value%></td>
<td bgcolor= "#e0e0e0"  align= "center" ><a href= "editcustomers.asp?id=<%=sid%>" ><font size= "-2 "> 200 ; 231 ; 236 ; 229 ; 237 ; 232 ; 242 ; 252 ;</font></a></td>
<td bgcolor= "#e0e0e0"  align= "center" ><a href= "deletecustomers.asp?id=<%=sid%>" ><font size= "-2 "> 211 ; 228 ; 224 ; 235 ; 232 ; 242 ; 252 ;</font></a></td>
</tr>


<% 
rs.MoveNext
wend
%>
</table>

<% rs.close
   connect.close %>

Все это работает при переменных формата nvarchar
Но если я начинаю доставлять другие например

@CustomerID smallint
and c.CustomerID like '%'+@CustomerID+'%'
и в asp
cmd.Parameters.Append cmd.CreateParameter("CustomerID",adSmallInt,adParamInput,2,sCustomerID)
начинает ругаться на set rs=cmd.Execute

Error Type:
(0x80040E07)

Чего я неправилбно делаю?
...
Рейтинг: 0 / 0
23.10.2002, 10:38:49
    #32061065
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
1. like определена только для строк
2. Нельзя складывать строку и число: '%'+@CustomerID+'%'. А Вы как думали?
...
Рейтинг: 0 / 0
23.10.2002, 11:14:23
    #32061083
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
А как надо...я начинающий поэтому мало чего знаю.
...
Рейтинг: 0 / 0
23.10.2002, 11:40:23
    #32061100
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Я так понял что нужно использовать команду convet а куда ее вставлять?
...
Рейтинг: 0 / 0
23.10.2002, 12:19:45
    #32061114
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE  procedure dbo.findcustomers

@Company    nvarchar( 100 ),
@NameID     nvarchar( 20 ),
@Address    nvarchar( 100 ),
@City       nvarchar( 50 ),
 @x int
as
select   CustomerID,
	 NameID,
	 Company,
          Address,
          City,

from customers c

where  c.Company like '%'+@Company+'%'
and     c.NameID 	like '%'+@NameID+'%'
and     c.Address 	like '%'+@Address+'%'
and     c.City	like '%'+@City+'%
and c.x = @x

Разве так не проще? Накой приводить к стоке числа,если поле в таблице числовое то и передавайте число,операции сравнения для чисел никто не отменял,да и работать будет быстрее. Думаеться что c.NameID у вас ,по идее,число,так перепишите ето по людски
......
@NameID nvarchar(20), -> @NameID int,
.......
and c.NameID like '%'+@NameID+'%' - >and c.NameID = @nameID
Да еще set nocount on в начало ХП впишите.
Удачи
...
Рейтинг: 0 / 0
23.10.2002, 12:30:05
    #32061119
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Понятно...а как быть с форматами данных типа smalldatetime ?
...
Рейтинг: 0 / 0
23.10.2002, 12:33:32
    #32061122
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Да тогода и не совсем так
c.x = @x будет ведь работать тока на сравнение....чисто..
то есть ведь над было чтоб если число заказывалось 85 например то выдавалось не только 85 но и 685 и 856...? То как быть
Вот так?
c.x = *@x*
...
Рейтинг: 0 / 0
23.10.2002, 12:43:52
    #32061134
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Просьба обясниться внятнее!
Для дат есть ф-ции сравнения тоже(datepart,datediff......)
А вот с поиском чисел я не понял,что ето за поиск такой,нафиг он нужен,зачем передавать конкретно NameId если вам нужно чтобы вернулось пол таблы.Определитесь что должна возвращать процедура,а то не логично получаеться.Если хооите получить всех продавцов по данной компании,то запрос должен иметь вид где следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select   CustomerID,
	 NameID,
	 Company,
          Address,
          City,

from customers c

where  c.Company like '%'+@Company+'%'

и не зачем передавать для етой задачи столько параметров
...
Рейтинг: 0 / 0
23.10.2002, 12:50:56
    #32061148
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Необходима была форма поиска по таблице. по каждому полю.
Могло заполнятся не только одно поле а несколько полей для поиска...
...
Рейтинг: 0 / 0
23.10.2002, 13:03:28
    #32061159
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Первое что приходит на ум ,так ето if.....else в Хп поставить и параметры по умолчанию и проверять их , если совпадают,то формировать нужный селект.
...
Рейтинг: 0 / 0
23.10.2002, 13:24:57
    #32061172
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Тут же дело состоит не только в прямом совпадении но и частитчном. А параметров на самом деле больше. Их 14 штук, это я тут выложил для простоты мало.

Вот...так вот наверно лучше может CONVERT всетаки использовать.
...
Рейтинг: 0 / 0
23.10.2002, 13:36:08
    #32061180
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
Ну еще по анзванию фирмы,ето еще понятно,по названию города не понятно:)
Разнестите логику поиска на несколко процедур и не мучайтесь. А вот с цыфрами не ясно - если передают 1 то что должно вернуться ,все цыфровые значения где присутствует 1? - не странно? тут диапазон значений нужен в такой ситуации,а не like.
Хорошо подумайте над логикой работы приложения.
...
Рейтинг: 0 / 0
23.10.2002, 13:54:31
    #32061194
Klopiki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP+ADO форматы данных.
С числами естесвенно никто вводить один не будет так как саим понятно что выдаст все.
Но есть например есть номер счета в банке по которому что то проплачили из которых часть чисел забыли или например номер фирмы из 4 знаков тока три помнит...а названия не помнит......
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ASP+ADO форматы данных. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]