Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Помогите с запросом на изменение даты

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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: Помогите с запросом на изменение даты Ответить с цитатой

ну это неприкольно, напиши какой нить текст ошибки.....у меня списка с номерами то нету Smile
Вернуться к началу
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.
Вопросов типа: "В моем полу подземный стук" будет меньше.
И Ваша "реальной ситуация:" не будет сталкиватья с проблеммами
изложеными выше.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...