Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Вт Фев 11 2003 10:36 Заголовок сообщения: Помогите с запросом на изменение даты |
|
|
Пожалуйста, подскажите, как решить вопрос. Задача такая: база данных (Access 2002), содержит таблицу Tab1. Требуется изменить данные в поле data таблицы Tab1. Тип данных поля data - дата/время. Мой вариант такой (на VB 6.3): Dim con As Object Dim rs As Object Dim Sql As String Dim data As Date data=InputBox("Новая дата:") Set con = Application.CurrentProject.Connection Sql = "UPDATE [Tab1]" Sql = Sql & " SET [Tab1].[data]=#" & data & "#" Set rs = CreateObject("ADODB.Recordset") rs.Open Sql, con, 1, adLockOptimistic Set rs = Nothing Set con = Nothing Но он почему-то не работает. |
|
Вернуться к началу |
|
|
MiND DistruptoR Гость
|
Добавлено: Вт Фев 11 2003 14:54 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
а коннекшн разве открывать ненадо ? и вообще, зачем нужен рекордсет для такой простой задачи ? можно же использовать метод Execute коннекшена....
а еще может просто дата не в том формате, что в базе.....или например время не задано...например DD.MM.YYYY HH.MM.SS |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Вт Фев 11 2003 16:24 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
1. На самом деле задача сложнее, я ее упростила, чтобы короче изложить проблему. 2. С «коннекшеном» все в порядке. Аналогичные Recordset-ы, в которых не фигурируют даты, работают нормально. 3. Дата в нужном формате. Но даже если ее для надежности отформатировать, то Recordset все равно не работает.
Dim con As Object Dim rs As Object Dim Sql As String Dim data As Date data=InputBox("Новая дата:") data=Format(data, «dd.mm.yyyy») Set con = Application.CurrentProject.Connection Sql = "UPDATE [Tab1]" Sql = Sql & " SET [Tab1].[data]=#" & data & "#" Set rs = CreateObject("ADODB.Recordset") rs.Open Sql, con, 1, adLockOptimistic Set rs = Nothing Set con = Nothing |
|
Вернуться к началу |
|
|
MiND DistruptoR Гость
|
Добавлено: Вт Фев 11 2003 17:37 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
а какую ошибку выдает при обработке ? |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Вт Фев 11 2003 17:53 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
Спасибо за помощь. -2147217913 (80040e07) |
|
Вернуться к началу |
|
|
MiND DistruptoR Гость
|
Добавлено: Вт Фев 11 2003 17:56 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
ну это неприкольно, напиши какой нить текст ошибки.....у меня списка с номерами то нету |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Вт Фев 11 2003 18:24 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
Ошибка синтаксиса: Sintax error in date in query expression ‘#31.01.2002#’
Нашла решение. Но оно какое-то корявое. Может, можно придумать что-нибудь другое?
Решение: Добавить модуль (неработающая процедура находилась в модуле формы), в котором в General Declarations:
Global data_sql As Date Option Compare Database
Function fdata_sql () As Date fdata_sql = data_sql End Function
В модуле формы:
Private Sub update_date Dim con As Object Dim rs As Object Dim Sql As String Dim data As Date data=InputBox("Новая дата:") data_sql = data Set con = Application.CurrentProject.Connection Sql = "UPDATE [Tab1]" Sql = Sql & " SET [Tab1].[data]= fdata_sql " Set rs = CreateObject("ADODB.Recordset") rs.Open Sql, con, 1, adLockOptimistic Set rs = Nothing Set con = Nothing End Sub |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Вт Фев 11 2003 18:40 Заголовок сообщения: Большое подозрение на то, что бейсик просит выражение даты (#31.01.2002#) в формате "MM/DD/YYY", а оно подается в род |
|
|
- |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Вт Фев 11 2003 19:00 Заголовок сообщения: Re: Большое подозрение на то, что бейсик просит выражение даты (#31.01.2002#) в формате "MM/DD/YYY", а оно подается в |
|
|
Спасибо за участие. Попробовала. Не помогло. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Вт Фев 11 2003 19:15 Заголовок сообщения: Тогда проверь, работает ли оператор, если дата введена в запрос в явном текстовом виде (без переменной) (-) |
|
|
- |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Вт Фев 11 2003 19:34 Заголовок сообщения: Ответ на: "Тогда проверь, работает ли опе..- Борис- 11-02-2003 19:15" Re: Тогда проверь, работает |
|
|
Вот это то мне и не понятно. Если заменить Если текст запроса: Sql = "UPDATE [Tab1]" Sql = Sql & " SET [Tab1].[data]=#" & data & "#" заменить, например, на: Sql = "UPDATE [Tab1]" Sql = Sql & " SET [Tab1].[data]=#31.12.2002#" то все чудесно выполняется. |
|
Вернуться к началу |
|
|
Вячеслав Гость
|
Добавлено: Вт Фев 11 2003 20:37 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
Никуда не годится Ваш вариант матушка!
Мой вариант такой (на VB 6.3): Dim con As Object Dim rs As Object ^^^^^^^^^^^^^^^^^^^^^^^^^^^ очень "поможет" для быстродействия программы Dim Sql As String Dim data As Date data=InputBox("Новая дата:") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ InputBox возвращает строку надеюсь дальше все понятно
Set con = Application.CurrentProject.Connection Sql = "UPDATE [Tab1]" Sql = Sql & " SET [Tab1].[data]=#" & data & "#" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ просто бред от начала до конца 1.Запись которую хотим обновить не спозиционированна!!!!!! 2. строку соединяем с датой - тоже саме что ужа с ежом. в VB есть функия FORMAT 3. Использование в Вашем случае "UPDATE".... |
|
Вернуться к началу |
|
|
MiND DistruptoR Гость
|
Добавлено: Ср Фев 12 2003 09:41 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
а может все сделать проще.....объявить переменную DATA, как простую строку..... |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Ср Фев 12 2003 14:08 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
Нет, тогда точно будет "уж+еж". |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Ср Фев 12 2003 14:11 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
Спасибо, Слава. У Вас, наверно, просто не было времени прочитать все, о чем мы тут беседовали. Иначе бы Вы про Format и «ужа с ежом» речи бы не шло.
1. Не буду спорить, что InputBox возвращает значение типа String. От себя добавлю, что использовать InputBox можно не только для ввода текста.
Можете убедиться на примере:
Private Sub input_data On Error GoTo Err_input_data Dim data As Date data = InputBox("Дата:") If IsDate(data) Then MsgBox "введена дата" Exit Sub Err_input_data: MsgBox "введено недопустимое значение" End Sub
Если в InputBox-e указать что-нибудь вроде 31.12.02, или 31.12.2002, или 31/12/02 или даже 31/12/02 9:00, VB преобразует введенную строку к типу даты и присвоит переменной соответствующее значение. Так что никакого соединения ужа с ежом тут нет. 2. Я уже объясняла, что проблема изложена в очень упрощенном виде. В реальной ситуации значение переменной data задается вовсе не с помощью InputBox-a 3. О попытках использования Format уже говорилось выше. 4. А причем здесь позиционирование? |
|
Вернуться к началу |
|
|
MiND DistruptoR Гость
|
Добавлено: Ср Фев 12 2003 14:17 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
ну мало ли, может он глюкавит из та того, что не с той записью например работает.... (хотя думаю врятли)
а что если без # написать ? |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Ср Фев 12 2003 14:43 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
Если без # - будет ошибка синтаксиса. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Ср Фев 12 2003 15:51 Заголовок сообщения: Теперь проверь, что содержится в data: MsgBox data (-) |
|
|
- |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Ср Фев 12 2003 18:15 Заголовок сообщения: Re: Теперь проверь, что содержится в data: MsgBox data (-) |
|
|
Дата. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Ср Фев 12 2003 18:41 Заголовок сообщения: Ну такого я еще не видел :( Последнее, что могу предложить, проверить непосредственно перед исполнением содержимое переменной S |
|
|
- |
|
Вернуться к началу |
|
|
Вячеслав Гость
|
Добавлено: Ср Фев 12 2003 19:30 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
Учитца Вам матушка надобно!
все почемуто думают что VB очень легкий - ЭТО БОЛЬШОЕ ЗАБЛУЖДЕНИЕ
Dim data As Date data = InputBox("Дата:") If IsDate(data) Then MsgBox "введена дата" ^^^^^^^ Всегда будет TRUE так как Dim data As _DATE_!!!!!! так что думайте головой прежде чем набивать код!!!
>VB преобразует введенную строку > к типу даты и присвоит переменной >соответствующее значение
ну детский сад ей богу! позвольте узнать где такое Вам сказали? в VB есть функция CDate(Str) - преобразует введенную строку к типу даты
>А причем здесь позиционирование? Внимательно посмотрите на запрос который Вы написали и подумайте как он будет работать!!! особенно если записей в таблице будет много
>просто не было времени прочитать >все, о чем мы тут беседовали
Беседа достойна собеседников |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Чт Фев 13 2003 18:00 Заголовок сообщения: Re: Спасибо. |
|
|
Ура! Какое замечательное имя – Борис!!!!! Ты просто потрясающий человек, Борис!!!!! Именно тебя должны ценить окружающие больше всего, Борис!!!! Борис – ты просто супер!!!!! …. и т.д., и т.п. – см. на http://tts.lt/~madigor/good.htm
СПАСИБО. Помог самый первый совет с форматированием. Если бы сразу вспомнить, что в Format символ-разделитель в дате определяется нац. настройкой! "UPDATE [Tab1] SET [Tab1].[data]=#" & Format(data, "MM/DD/YYYY") & "#" - не работает "UPDATE [Tab1] SET [Tab1].[data]=#" & Format(data, "MM\/DD\/YYYY") & "#" - все нормально. |
|
Вернуться к началу |
|
|
nataly
Зарегистрирован: 10.02.2003 Сообщения: 16
|
Добавлено: Чт Фев 13 2003 20:38 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
1. С тем, что «If IsDate(data)…» – было масло масляное, согласна. 2. Вот именно, Dim data As _DATE!!! И с чего это после такого “Dim” на строке data = InputBox("Дата:") ошибки не возникает, если в InputBox-е - 31.12.02? Private Sub input_data ON ERROR GOTO ERR_INPUT_DATA Dim data As Date data = InputBox("Дата:") MsgBox "введена дата " Exit Sub ERR_INPUT_DATA: MSGBOX "ВВЕДЕНО НЕДОПУСТИМОЕ ЗНАЧЕНИЕ" End Sub
3. Ну не интересует меня позиционирование. Я же говорю, в вопросе все упрощено. В реальной ситуации: … data=Me![data] … Sql = "UPDATE [assigment]" Sql = Sql & " SET [data]=#" & data & "#" Sql = Sql & " WHERE [ID]=" & intID Sql = Sql & " AND [resourse]='" & stResourse & "'" …. При этом в таб. assignment содержится 100-200 записей.
4. Слава, а почему у Вас все в таком ядовитом тоне, типа: «все пид…сы, один я Д’Артаньян»? Вам вроде никто не грубил. Что у Вас, бедняжки, стряслось - проблемы на работе, в семье, грипп, переходный возраст, климакс, или еще какое горе? Take it easy! |
|
Вернуться к началу |
|
|
Вячеслав Гость
|
Добавлено: Пт Фев 14 2003 21:20 Заголовок сообщения: Re: Помогите с запросом на изменение даты |
|
|
>В реальной ситуации: >data=Me![data] >Sql = "UPDATE [assigment]" >Sql = Sql & " SET [data]=#" & data & "#" >Sql = Sql & " WHERE [ID]=" & intID >Sql = Sql & " AND [resourse]='" & stResourse & "'"
В варианте с рекордсетом это полный бред! Самое забавное это использование UPDATE в варианте открытия рекорсета! интересно что Вы этим хотите получить? Судя по коду Вы с трудом представлеяте зачем нужен рекордсет. Я думаю Вас эта мысль тоже посетит после ознакомления с ирархией ADODB. Очень ркомендую.
>4. Слава, а почему у Вас все в таком ядовитом тоне, типа: «все пид…сы, >один я Д’Артаньян»? Вам вроде никто не грубил.
Я никому не грублю. Вам рекомендую больше читать книги по VB. Вопросов типа: "В моем полу подземный стук" будет меньше. И Ваша "реальной ситуация:" не будет сталкиватья с проблеммами изложеными выше. |
|
Вернуться к началу |
|
|
|