[решено] Отсутствует ID, SQLQuery как сохранять?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение resident » 28.02.2016 14:42:40

debi12345 писал(а):Глюк

Точно! Я тогда на 1.2.6 и 1.4.4 пробовал.
Сейчас попробовал - работает, что с параметрами, что без.

debi12345 писал(а):А сам параметр ":<field_name>" в TDataset.Params зарегестрировали и к нужному БД-полю привязать не забыли ?

Так работает без параметров.
И где-то вроде читал, что для этих UpdateSQL и т.п. параметры не нужны.

debi12345 писал(а):Автоматическое хранение стартовго (:OLD_) и финального (:NEW_) значений. Иначе нужна возня с промежуточными переменными.

Долго не мог понять вобще о чем речь :)
Вот пример, который все объясняет:
http://wiki.freepascal.org/Working_With_TSQLQuery
Код: Выделить всё
UPDATE fpdev SET UserName=:USER, InstEmail=:e-mail WHERE UserName=:OLD_User;

Получается, что мне OLD префикс пока не нужен.

debi12345 писал(а):подавай уже готовый SSH-канал. А если так, то проще всего использовать например STUNNEL

Это да. Ок, надо будет посмотреть :)

Вот кстати про логи Лазаруса.
Он при обновлении каждой записи похоже подготавливает запрос на сервере для принятия параметров. В логах "Prepare: prepare prepstXXX ..." и "Execute: ...". Нельзя ли подготовить все один раз?

Потом что странно примерно через десяток измененных записей проскакивает первоначальный запрос Select, хотя я его не вызывал. Причем он в самом начале был как положено Prepare / Execute, а потом идет как Fetch. Следующие данные из базы подкачивает? (CommitRetaining делаю через каждые 5 измененных записей, но думаю это не связано.)

И в логах не видно сами значения передаваемых данных. А может и еще чего интересного не видно. Придется наверное посмотреть, что там за WireShark.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение debi12345 » 28.02.2016 15:03:46

Получается, что мне OLD префикс пока не нужен.
Код: Выделить всё
UPDATE fpdev SET UserName=:USER, InstEmail=:e-mail WHERE UserName=:OLD_User;

Как это не нужен - если положение в таблице где будет запись, опередляется именно по OLD (значению на момент выборки ) ?

prepare prepstXXX ...". Нельзя ли подготовить все один раз?

Один раз в какой момент,100% надежно просчитывамый комплятором ? (это может знать толкь программист).
Параметризация запросов также необходима если нужно обмениваться данными с бинарными полями БД (архивами, картинами, мухыкой и т.п.) - их можно прокачивать только через параметры (про эскейпизацию чтобы передать бинарку в SQL-тексте скромно молчу).
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение resident » 28.02.2016 15:41:24

debi12345 писал(а):Как это не нужен - если положение в таблице где будет запись, опередляется именно по OLD (значению на момент выборки ) ?

При смене положения (курсора) методом Next меняются все поля текущей записи, в том числе и id.
Не id определяет положение курсора, а наоборот курсор определяет id.
Но т.к. id у меня не изменяется, то получается, что одновременно id = OLD_id = NEW_id.
И когда я убираю префикс из UpdateSQL, все работает как и с ним.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение debi12345 » 28.02.2016 16:05:00

Но т.к. id у меня не изменяется, то получается, что одновременно id = OLD_id = NEW_id.

Потому что Вы не редактировали конкретно поле ID,а редактирвали другое поле.

ПС:
до момента DataSet.Post(): id = OLD_id = NEW_id независимо от того, были изменения ID в ходе редактирования или нет.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение resident » 28.02.2016 16:41:31

debi12345 писал(а):Потому что Вы не редактировали конкретно поле ID,а редактирвали другое поле.

Да, у меня так.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение vitaly_l » 29.02.2016 16:42:41

resident писал(а): id = OLD_id = NEW_id

Если делать запрос одновременно к двум базам, то при сохранении, он пытается все поля сохранить как ни странно, в ОДНУ из них.
В общем, если с одной базой работать, SQLQuery - вроде как делает всё правильно.
У меня почему-то нет в логе запросов с префиксом NEW_ ? (я правда не делаю post),
он сразу пишет в Execute запрос конечные значения и потом в логе commit - это неправильно?.

Добавлено спустя 8 минут 55 секунд:
Убрал autocommit, он сразу пишет в базу при Execute (в логе, даже не вызывает commit), но в базу пишет. команда .ApplyUpdates;

И непонятно он в логе пишет по 2-5 одинаковых действия подряд. А один раз было вообще 33 Fetch/ Так и должно быть?


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение resident » 29.02.2016 19:36:48

vitaly_l писал(а):Если делать запрос одновременно к двум базам

А как вы работаете с двумя базами?

vitaly_l писал(а):У меня почему-то нет в логе запросов с префиксом NEW_ ?

У меня тоже

vitaly_l писал(а):И непонятно он в логе пишет по 2-5 одинаковых действия подряд

У меня такое только на SELECT, а на UPDATE сначала подготовка, потом отправка.

vitaly_l писал(а):А один раз было вообще 33 Fetch/ Так и должно быть?

Спрашивал:
viewtopic.php?f=5&t=10952&start=90#p93996
По-моему так и должно быть для SELECT. Ведь громадную базу сразу не закачаешь SELECT-ом - она может и не влезть в оперативку. Поэтому качает по частям, по мере прыганья курсора SQLQuery подкачивает новую часть ответа SELECT запроса с сервера.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение vitaly_l » 29.02.2016 19:51:15

resident писал(а):А как вы работаете с двумя базами?

SELECT `name1`,`name2` FROM `one`,`two` LIMIT 5
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение Лекс Айрин » 29.02.2016 19:57:49

vitaly_l, то есть, если судить по запросу, надо записать в обе базы одно и тоже?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение vitaly_l » 29.02.2016 20:05:01

Лекс Айрин писал(а):то есть, если судить по запросу, надо записать в обе базы одно и тоже?

Не ручками а автоматически, чтобы SQLQuery сама создала запрос к базе при нажатии на ввод, а не я это программировал. И не одно и тоже, а каждая в свои колонки, т.к. они естественно уникальные для каждой таблицы.


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение resident » 29.02.2016 20:29:01

vitaly_l писал(а):SELECT `name1`,`name2` FROM `one`,`two` LIMIT 5

Вы таблицы одной базы данных называете двумя базами данных?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение vitaly_l » 29.02.2016 20:30:45

resident писал(а):Вы таблицы одной базы данных называете двумя базами данных?

Пардон, я оговорился. Конечно же речь о таблицах.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение Лекс Айрин » 29.02.2016 20:42:56

vitaly_l, так стоит делать к каждой таблице свой запрос... А то ведь неизвестно как СУБД его поймет... либо просто обрежет имя второй таблицы, либо добавит несуществующие поля к каждой... т. е. продублирует записи. Что, собственно, вы и попросили сделать. Судя по всему, реализуется первый вариант.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение debi12345 » 29.02.2016 21:07:07

Хм, смелые вы ребята - полагаетесь на интеллект (или наоборот тупорылость) весьма примитивного SQL-парсера SQLDB :) При таком подходе должно быть весело и креативно писАть например финансовые задачи - один бог (или черт) знает что будет заноситься в БД :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: [решено] Отсутствует ID, SQLQuery как сохранять?

Сообщение sign » 01.03.2016 04:52:36

Ну нравится нкоторым по граблям прыгать.
С одной стороны шишка на лбу, но с другой - весёлые звёздочки в глазах!
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 228

Рейтинг@Mail.ru