Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление запроса UPDATE [D6, Paradox]


Страницы:   1 2

NNH ©   (2007-10-22 13:26:00) 

Добрый день, мастера! Не смог побороть обновление запроса: поля DATA - дата, KOL - Int. Выдает ошибку при обновлении  ExecSQL. Пробовал и через параметры, и прямо указывая значения. Не помогает. Перерыл Архангельского - конкретного нет. Ошибка видимо из-за типов полей. Но как бороться?!

'UPDATE Tab SET DATA=:D KOL=Edit1.text'
Запрос формируется, а на обновлении база меня посылает :-(


Desdechado   (2007-10-22 16:43:00) [1]

Я одного не понимаю, где текст ошибки?
И нахрена UpdateSQL при редактировании TTable.
И вообще, синтаксис SQL учи, если его используешь. Модифицируемые поля должны запятыми разделяться.


Anatoly Podgoretsky   (2007-10-22 16:43:00) [2]


> а на обновлении база меня посылает :-(

Хочешь, чтобы и мы тебя послали?
До этого совсем недалеко.


NNH   (2007-10-22 16:19:00) [3]

> Если ты редактируешь в гриде накаких запросов тебе не нужно. Делай все методами датасета Insert, Edit, Delete. Все данные в датасете будут актуальны и переоткрывать ничего не надо. По событию BeforePost датасета "основной" таблицы обновляй свои "вспомогательные таблицы", можно запросом можно опять же через датасет.

Спасибо. Пошел пробовать :-)))


NNH   (2007-10-22 16:01:00) [4]

> А в городе Канада/Canada за использование Парадокса еще в тюрьму не сажают? 8-)
При регистрации не отметил любимый Харьков :-)))


NNH   (2007-10-22 16:00:00) [5]

>Paradox в многопользовательском режие? Ах, оставьте эти игры. :)
А что посоветуете по-проще? С другим не пробовал, простите...


Sergey13   (2007-10-22 15:59:00) [6]

> [18] NNH ©   (22.10.07 15:33)

А в городе Канада/Canada за использование Парадокса еще в тюрьму не сажают? 8-)

Если ты редактируешь в гриде накаких запросов тебе не нужно. Делай все методами датасета Insert, Edit, Delete. Все данные в датасете будут актуальны и переоткрывать ничего не надо. По событию BeforePost датасета "основной" таблицы обновляй свои "вспомогательные таблицы", можно запросом можно опять же через датасет.


Маша Шрайбер   (2007-10-22 15:46:00) [7]

>> NNH ©   (22.10.07 15:33) [18]

LocalSQL.hlp

>> запрос с UPDATE и присваением как в книжках, то не работает.

Не верю! (с)
Читайте внимательней.

>> Появилась задача: локальная база данных может в будущем будет использоваться двумя машинами.

Paradox в многопользовательском режие? Ах, оставьте эти игры. :)


NNH   (2007-10-22 15:33:00) [8]

Основной таблицей я называю таблицу с данными Tab.db (есть еще вспомогательные, например, кто и когда работал с базой данных).
Появилась задача: локальная база данных может в будущем будет использоваться двумя машинами. Поэтому я начал писать процедуры через запросы.
Теперь нужно написать команду "редактирование существующей записи".
С удалением, добавлением и заменой записей разобрался. А вот с редактированием (обновленние таблицы после редактирования) облом!
Пользователь может редактировать только два поля - количество (int) и вид упаковки (String). После нажатия кнопки Сохранить поле Дата нужно изменить на NOW. Для передачи в запрос измененных значений я применил два параметра запроса для даты (:Da) и для количества (:Ko).
Когда я применил: SQL_Up.Modify , то данные почему-то не обновлялись. Почитав книжки, убрал Модифи, и поставил ExecSQL. В результате ни данные не меняются, а компилярор посылает.
Я старался объяснить ситуацию :-)
Как написать запрос на обновление с параметрами? Если SELECT работает сэтими полями нормально, то изменив запрос с UPDATE и присваением как в книжках, то не работает. Может последовательность команд не правильная?
Подскажи пример запроса и команды на обновление на свой взгляд (если уж до этого не послал меня :-))


Sergey13   (2007-10-22 15:04:00) [9]

> [16] NNH ©   (22.10.07 14:48)

Как же я тебе скажу поконкретнее если ты говоришь про свою проблему меньше чем Зоя Космодемьянская на допросе? Да еще используешь какую то свою терминологию.
Что за основнаятаблица? Что вообще редактируется? Если редактируется в гриде - там же уже новые значения - зачем обновлять.

ЗЫ: Возьми себе за правило - помни, что человек которому ты задаешь вопрос никогда твоего проекта не видел и не слышал о нем.


NNH   (2007-10-22 14:48:00) [10]

Это я сказал об общей задаче. Вопрос по другому:
Как обновить данные в основной таблице после редактирования с изменными значениями ячеек параметрами DATE and Int? Как воспользоваться твоей подсказкой о перекрытии? Если можно - скажи конкретней. Может где-то ссылку можно прочесть?


Sergey13   (2007-10-22 14:40:00) [11]

> [14] NNH ©   (22.10.07 14:34)

Как твоя задача перекликается с гридом? Грид тут вообще не при делах. Возврат запросом измененных другими данных производится ПЕРЕОТКРЫТИЕМ запроса.


NNH   (2007-10-22 14:34:00) [12]

Компилируется...
Значит я не правильно ставлю вопрос :-((
Задача в общем-то простая. Одним запросом (SQL_Sel) отображаю данные в Гриде. После редактирования данных (количество упаковок) нужно вернуть данные другим запросом (SQL_Up) в основную таблицу с указанием даты редактирования. После чего вновь отобразить в Гриде измененную таблицу запросом (SQL_Sel).


Sergey13   (2007-10-22 14:30:00) [13]

> [11] NNH ©   (22.10.07 14:22)
> Присваиваю значения параметрам. Правильно?

Не неправильно. Мне вообще кажется, что ты разводишь нас - сомнительно, что твой код из
> [8] NNH ©   (22.10.07 14:05)
вообще скомпилировался, неговоря уж о том что бы дойти до "обрыва".


Маша Шрайбер   (2007-10-22 14:25:00) [14]

Он себя "художником" считает. И это правильно.


NNH   (2007-10-22 14:22:00) [15]

> ParamByName('D').AsString:=:D;
> ParamByName('Ko').AsString:=:Ko;
Присваиваю значения параметрам. Правильно?

> ExecSQL;
Пытаюсь выполнить обновление основной таблицы. Не правильно?

Через MODIFY тоже не обновилось в основной таблице...
А про художника - это цитата из классики :-)


Sergey13   (2007-10-22 14:13:00) [16]

> [8] NNH ©   (22.10.07 14:05)
> "Художника" всякий обидеть может :-))

Ты себя художником считаешь? Ну тогда скажи заказчику твоей "проги", что ты так видишь мир. Может пройдет. 8-)


Sergey13   (2007-10-22 14:12:00) [17]

> [8] NNH ©   (22.10.07 14:05)
> SQL_Up.add (S); // вставил текст запроса - все ОК

Не вставил, а добавил!
Кстати зачем тогда перед этой строчкой Prepare;?

> ParamByName('D').AsString:=:D;
> ParamByName('Ko').AsString:=:Ko;

Это как вообще?

> Open; // - все ОК - в таблице запроса данные обновились без проблем
> ExecSQL; и вот здесь обрыв!

Открыть, а потом выполнить? Ты примерно представляешь что значит каждый оператор?


NNH   (2007-10-22 14:05:00) [18]

>Ты код давай, а не свои спорные формулировки. "при обновлении базы" - это вы овощную базу имеете в виду?
"Художника" всякий обидеть может :-))

Запрос такой: 'UPDATE Tab SET DATA=:D KOL=:Ko WHERE NAM=:N'
В таблице запроса данные обновляются. А при коде на выполнение обновления в основной таблицы БАЗЫ ДАННЫХ (Tab.db) генерируется ошибка:
Close.
Prepare;
SQL_Up.add (S); // вставил текст запроса - все ОК
ParamByName('D').AsString:=:D;
ParamByName('Ko').AsString:=:Ko;
Open; // - все ОК - в таблице запроса данные обновились без проблем
ExecSQL; и вот здесь обрыв!


Sergey13   (2007-10-22 13:51:00) [19]

> [6] NNH ©   (22.10.07 13:47)

> почему выдают ошибку по полям

Вот так прямо и выдает - ошибка по полям?

> В таблице запроса все обновляется, а вот при обновлении
> базы выдает ошибку :-(

Ты код давай, а не свои спорные формулировки. "при обновлении базы" - это вы овощную базу имеете в виду?


NNH   (2007-10-22 13:47:00) [20]

Есть в форуме кто-либо знающий синтаксис SQL, и который может подсказать: почему выдают ошибку по полям
'UPDATE Tab SET DATA=:D KOL=:Ko WHERE NAM=:N'
В таблице запроса все обновляется, а вот при обновлении базы выдает ошибку :-(


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо