Разница в запросе с датой провайдера SQLOLEDB

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Разница в запросе с датой провайдера SQLOLEDB

Сообщение shady » 16.11.2006 (Чт) 10:28

При записи в БД SQL 2005 использую вышеописанный провайдер.
Ф-ю которая переводит дату (датапикера в основном) в формат ANSI SQL
Код: Выделить всё
Public Function DateToSQL(ByVal strValue As String) As String
    DateToSQL = Format(strValue, "yyyy-mm-dd")
End Function

Пишу при помощи хранимки.

Но тут мне понадобилось сделать SELECT и используя эту ф-ю мне ничего не возвращает. Оказалось нужно
DateToSQL = Format(strValue, "yyyy-dd-mm")

При этом, в таком формате, в таблицы SQL писать не хочет. Подскажите, где я могу почитать о таком поведении.
Кто виноват? Провайдер? Региональные настройки?[/quote]

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2006 (Чт) 10:32

Используй yyyymmdd. А еще лучше используй параметрические запросы.
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.11.2006 (Чт) 10:44

Селект с использованием yyyymmdd проходит, а вот запись в таблицу - нет.
З.Ы. Пишу в таблицу хранимкой

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2006 (Чт) 10:54

Что значит "запись не проходит"?
Как ты пишешь в таблицу?
Можешь показать код ХП и как ты ее вызываешь?
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.11.2006 (Чт) 11:34

хранимка:
ALTER PROCEDURE [dbo].[AddBill]
@IDBill varchar (10), -- номер счета
@IDCust int, -- код плательщика
@IDContrCust int, -- код договора
@IDPay int, -- код получателя продукции
@IDTMC int, -- код ТМЦ отгрузки
@IDCur int, -- код валюты
@CrDate datetime, -- дата создания
@IDTrans int, -- код перевозчика
@IDTR bit, -- определитель. транспортных расходов (0 - в цене, 1 - отдельной строкой)
@TRPrice money, -- сумма транспортных
@NDSPrice real, -- сумма НДС в счете
@Comm varchar (1000) -- комментарий

AS
begin
Insert into Bills (IDBill,IDCust,IDContrCust,IDPay,IDTMC,IDCur,IDTrans,IDTR,TRPrice,CrDate,NDSPrice,Comm) values (@IDBill,@IDCust,@IDContrCust,@IDPay,@IDTMC,@IDCur,@IDTrans,@IDTR,@TRPrice,@CrDate,@NDSPrice,@Comm)
return SCOPE_IDENTITY()
end

вызываю хранимку:
Код: Выделить всё
                    Set cmd = New ADODB.Command
                        cmd.CommandType = adCmdStoredProc
                        cmd.CommandText = "AddBill"

                    Set cmd.ActiveConnection = conn
                        cmd.Parameters.Refresh

                        With cmd
                            .Parameters("@IDBill").Value = Text2.Text
                            .Parameters("@IDCust").Value = CInt(txtIDCust.Text
                            .Parameters("@IDContrCust").Value = dcContract(0).BoundText
                            .Parameters("@IDPay").Value = CInt(txtIDPay.Text)
                            .Parameters("@IDTMC").Value = dcTMC.BoundText
                            .Parameters("@IDCur").Value = CInt(dcCur.BoundText)
                            .Parameters("@idTrans").Value = dcTransporter.BoundText
                            .Parameters("@CrDate").Value = DateToSQL(dateCreate.Value)
                            .Parameters("@IDTR").Value = IIf(Option1(1).Value = True, 1, 0)
                            .Parameters("@TRPrice").Value = IIf(Len(txtTransp(3).Text) = 0, 0, txtTransp(3).Text)
                            .Parameters("@NDSPrice").Value = CCur(txtAddEditCustomer(10).Text)
                            .Parameters("@Comm").Value = txtAddEditCustomer(12).Text
                            .Execute
                        End With


"запись не проходит" - сообщение об ошибке:
Приложение использует для текущей операции значение неверного типа

на строке
Код: Выделить всё
.Parameters("@CrDate").Value = DateToSQL(dateCreate.Value)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2006 (Чт) 11:36

Оцени .Parameters.Append .CreateParameter("@CrDate", adDate, ..., dateCreate.Value)

Хотя нет, в твоем случае он уже adDate. Просто присваивай значение даты, а не строку.
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.11.2006 (Чт) 11:51

Просто присваивай значение даты, а не строку

В моем случае, это датапикер. Подводных камней не будет?
З.Ы. проверил, вроде работает. но некоторые сомнения имеют место :(. Если не сложно, поясни немного.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2006 (Чт) 12:06

Ну если есть сомнения, то используй CDate(dateCreate.Value).
Но особого смысла нет.
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.11.2006 (Чт) 12:18

Ок, спасибо. Тему можно закрывать.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList