Оновлення запиту update
Оновлення запиту UPDATE
Добрий день, майстри! Не зміг побороти оновлення запиту: поля DATA - дата, KOL - Int. Видає помилку при оновленні # XA0; ExecSQL. Пробував і через параметри, і прямо вказуючи значення. Не допомагає. Перерив Ніжин - конкретного немає. Помилка мабуть через типів полів. Але як боротися ?!
"UPDATE Tab SET DATA =: D KOL = Edit1.text"
Запит формується, а на оновленні база мене посилає :-(
Правильно робить що посилає
Вчити синтаксис SQL.
Твій запит і не запит зовсім, а безглуздий набір тексту.
Зауваж - тобі видає. Нам сюди ен видає.
> "UPDATE Tab SET DATA =: D KOL = Edit1.text"
Це реальний код або поспішав і спрощував що "б вам зрозуміло було"?
> # XA0; природно написано "WHERE NAM =: N"
А весь запит цілком з кодом разом привести можна?
Є в форумі хто-небудь знає синтаксис SQL, і який може підказати: чому видають помилку по полях
"UPDATE Tab SET DATA =: D KOL =: Ko WHERE NAM =: N"
У таблиці запиту все оновлюється, а ось при оновленні бази видає помилку :-(
> Чому видають помилку по полях
Ось так прямо і видає - помилка по полях?
> У таблиці запиту все оновлюється, а ось при оновленні
> Бази видає помилку :-(
Ти код давай, а не свої спірні формулювання. "При оновленні бази" - це ви овочеву базу маєте на увазі?
> Ти код давай, а не свої спірні формулювання. "При оновленні бази" - це ви овочеву базу маєте на увазі?
"Художника" всякий образити може :-))
Запит такий: "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; і ось тут обрив!
Чи не вставив, а додав!
До речі навіщо тоді перед цим рядком Prepare ;?
> ParamByName ( "D"). AsString: =: D;
> ParamByName ( "Ko"). AsString: =: Ko;
> Open; // - все ОК - в таблиці запиту дані оновилися без проблем
> ExecSQL; і ось тут обрив!
Відкрити, а потім виконати? Ти приблизно уявляєш що означає кожен оператор?
Ти себе художником вважаєш? Ну тоді скажи замовнику твоєї "проги", що ти так бачиш світ. Може пройде. 8-)
> ParamByName ( "D"). AsString: =: D;
> ParamByName ( "Ko"). AsString: =: Ko;
Привласнюю значення параметрам. Правильно?
> ExecSQL;
Намагаюся виконати оновлення основної таблиці. Чи не правильно?
Через MODIFY теж не оновилося в основній таблиці.
А про художника - це цитата з класики :-)
Він себе "художником" вважає. І це вірно.
Компілюється.
Значить я не правильно ставлю питання: - ((
Завдання в общем-то проста. Одним запитом (SQL_Sel) відображаю дані в грід. Після редагування даних (кількість упаковок) потрібно повернути дані іншим запитом (SQL_Up) в основну таблицю із зазначенням дати редагування. Після чого знову відобразити в грід змінену таблицю запитом (SQL_Sel).
Як твоя задача перегукується з ґрідом? Грід тут взагалі ні при чому. Повернення запитом змінених іншими даних проводиться перевідкриття запиту.
Це я сказав про загальному завданню. Питання по іншому:
Як оновити дані в основній таблиці після редагування з змінити значення осередків параметрами DATE and Int? Як скористатися твоєю підказкою про перекриття? Якщо можна - скажи конкретніше. Може десь посилання можна прочитати?
Як же я тобі скажу конкретніше якщо ти говориш про свою проблему менше ніж Зоя Космодем'янська на допиті? Та ще використовуєш якусь свою термінологію.
Що за основна таблиця? Що взагалі редагується? Якщо редагується в гріді - там же вже нові значення - навіщо оновлювати.
ЗИ: Візьми собі за правило - пам'ятай, що людина якій ти ставиш питання ніколи твого проекту не бачив і не чув про нього.
Основний таблицею я називаю таблицю з даними Tab.db (є ще допоміжні, наприклад, хто і коли працював з базою даних).
З'явилася завдання: локальна база даних може в майбутньому буде використовуватися двома машинами. Тому я почав писати процедури через запити.
Тепер потрібно написати команду "редагування існуючого запису".
З видаленням, додаванням і заміною записів розібрався. А ось з редагуванням (оновлення таблиці після редагування) облом!
Користувач може редагувати лише два поля - кількість (int) і вид упаковки (String). Після натискання кнопки Зберегти поле Дата потрібно змінити на NOW. Для передачі в запит змінених значень я застосував два параметра запиту для дати (: Da) і для кількості (: Ko).
Коли я застосував: SQL_Up.Modify. то дані чомусь не оновлювалися. Почитавши книжки, прибрав Модифі, і поставив ExecSQL. В результаті ні дані не змінюються, а компілярор посилає.
Я намагався пояснити ситуацію :-)
Як написати запит на оновлення з параметрами? Якщо SELECT працює сетімі полями нормально, то змінивши запит з UPDATE і прісваеніем як в книжках, то не працює. Може послідовність команд не правильна?
Підкажи приклад запиту та команди на оновлення на свій погляд (якщо вже до цього не послав мене :-))
>> запит з UPDATE і прісваеніем як в книжках, то не працює.
Не вірю! (С)
Читайте уважніше.
>> З'явилася завдання: локальна база даних може в майбутньому буде використовуватися двома машинами.
Paradox в розрахованому на багато користувачів режіе? Ах, залиште ці ігри. )
А в місті Канада / Canada за використання Парадокс ще в тюрму не саджають? 8-)
Якщо ти редагуєш в гріді накакіх запитів тобі не потрібно. Роби все методами датасета Insert, Edit, Delete. Всі дані в датасета будуть актуальні і перевідкривати нічого не треба. За подією BeforePost датасета "основний" таблиці оновлюй свої "допоміжні таблиці", можна запитом можна знову ж через датасета.
> Paradox в розрахованому на багато користувачів режіе? Ах, залиште ці ігри. )
А що порадите по-простіше? З іншим не пробував, вибачте.
> А в місті Канада / Canada за використання Парадокс ще в тюрму не саджають? 8-)
При реєстрації залишив поза увагою улюблений Харків :-)))
> Якщо ти редагуєш в гріді накакіх запитів тобі не потрібно. Роби все методами датасета Insert, Edit, Delete. Всі дані в датасета будуть актуальні і перевідкривати нічого не треба. За подією BeforePost датасета "основний" таблиці оновлюй свої "допоміжні таблиці", можна запитом можна знову ж через датасета.
Дякуємо. Пішов пробувати :-)))
> А на оновленні база мене посилає :-(
Хочеш, щоб і ми тебе послали?
До цього зовсім недалеко.
Я одного не розумію, де текст помилки?
І нахрена UpdateSQL при редагуванні TTable.
І взагалі, синтаксис SQL вчи, якщо його використовуєш. Модифікуються поля повинні запитом розділятися.