1 (edited by Alfil 2022-03-22 13:10:35)

Topic: Сохранение в базу. Парочка проблем

Добрый день
Возникла проблема с сохранением записи в таблицу из формы.
При попытке использовать штатные средства для записи из таблицы "SearchPrihTab" в форме, в таблицу sql "Prih" переносится не только нужная запись, но и ВСЕ позиции из привязанной таблицы ("Autors")
Попробовал сделать это через скрипт, но получил ошибку "INSERT INTO Prih (KolPr, id_Docs, id_Book) VALUES ("3"," "," ")"
Я так понимаю что не понимает что вставлять в "id_Docs" и "id_Book"
Уже 3 дня пытытаюсь решить проблему, но получается как-то не очень. Ткните носом в  ошибку. Сам я в скриптах, да и в sql b delphi ноль, пытаюсь разобраться с помощью гугла и документции, но пока результатов маловато.
.
Дополнено
В общем, таковы результаты рабочего дня:

1: Фокус с таблицы SearchPrihTab слетает при двойном клике на ней, который делается для добавления пунктов записи из таблицы на другие элементы формы, дальнейшего вычисления и отображения внутри формы общего количества экземпляров (Book.Kol) после прихода и последующего обновления этой записи в базе Book. Если после двойного клика снова выбрать необходимую запись в SearchPrihTab то запись в базу Prih проходит нормально, но это не вариант, нужно что то придумывать ( Либо вычислять другим способом, либо как то прописывать что б фокус после двойного клика не слетал (

2. Таблица не отображает записи, если они не связаны напрямую с базой, с которой считываются записи. То есть у меня базы авторов(Autor) и издательств (IsdatTab) привязаны к базе книг (Book), а уже Book привязана к Prih и соответственно Autor и IsdatTab либо не отображаются таблицей, либо вообще не записываются в Prih (пока не понял). Можно конечно связать дополнительно Autor и IsdatTab с Prih и при сохранении в Prih выбирать элементы формы в которых эта запись в наличии (например комбобокс, по которому происходит поиск по авторам), но это, блин, костыль.

Post's attachments

Attachment icon Bb2.zip 336.11 kb, 148 downloads since 2022-03-22 

2 (edited by Alfil 2022-03-22 03:38:04)

Re: Сохранение в базу. Парочка проблем

Скриншот при добавлении без скрипта

Post's attachments

Attachment icon er.jpg 206.53 kb, 66 downloads since 2022-03-22 

Re: Сохранение в базу. Парочка проблем

Скриншот ошибки со скриптом

Post's attachments

Attachment icon Er1.jpg 247.34 kb, 69 downloads since 2022-03-22 

4 (edited by Alfil 2022-03-22 03:49:18)

Re: Сохранение в базу. Парочка проблем

По первому варианту похожу что добавляет все правильно, но в таблице формы где отображаются все приходы, почему то показывает все записи из привязанных таблиц...

5 (edited by sibprogsistem 2022-03-22 05:15:04)

Re: Сохранение в базу. Парочка проблем

var - объявляется только один раз
Вы пытаетесь получить id из таблицы в которую потом же пытаетесь записать поля Prih
 
а нужно брать id таблиц Book и Docs , и потом записывать их в ключ

var
    IDdocs:string = SQLExecute('SELECT id FROM Book WHERE id='+PrihForm.CombDocs.sqlValue); // id записи таблицы Docs
    IDbook:string = SQLExecute('SELECT id FROM Docs WHERE id='+PrihForm.SearchPrihTab.sqlValue); // id записи таблицы Book

 
а вообще получать id таким способом не обязательно так как sqlValue содержит этот самый id
можно записать так

SQLExecute('INSERT INTO Prih(KolPr, id_Docs, id_Book) VALUES ("'+PrihForm.KolPr.Text+'","'+PrihForm.CombDocs.sqlValue+'","'+PrihForm.SearchPrihTab.sqlValue+'")'); //Запись в Prih

6 (edited by Alfil 2022-03-22 06:11:27)

Re: Сохранение в базу. Парочка проблем

sibprogsistem wrote:

а вообще получать id таким способом не обязательно так как sqlValue содержит этот самый id
можно записать так

SQLExecute('INSERT INTO Prih(KolPr, id_Docs, id_Book) VALUES ("'+PrihForm.KolPr.Text+'","'+PrihForm.CombDocs.sqlValue+'","'+PrihForm.SearchPrihTab.sqlValue+'")'); //Запись в Prih

Спасибо, данный вариант срабатывает, но с одним моментом - запись проискодит только если в этот момент активна таблица, то есть если фокус при нажатии клавиши "добавить" находится на SearchPrihTab. Если же после выбора записи в таблице выбрать другим элементы (например выбрать документ или поставить количество) то вылетает ошибка "Not Null constraint failed: Prih.id_Book" и сообщение "INSERT INTO "Prih" ("id_Book","id_Docs",KolPr") VALUES (NULL, 1, '3'), то есть, похоже, он не может получить id_Book.
Буду гуглить как сделать что б она оставалась в фокусе постоянно либо получить другим образом этот id_Book
Ну и вывод как на первом скриншоте с отображением всех записей упомянутых в таблице Autor остался. Тут уже с самой таблицей нужно разбираться похоже. Либо это баг...

Re: Сохранение в базу. Парочка проблем

Alfil wrote:

запись проискодит только если в этот момент активна таблица, то есть если фокус при нажатии клавиши "добавить" находится на SearchPrihTab.


видимо что-то у Вас не корректно настроено..
если не найдете, то сделайте глобальную переменную и при клике по ячейке заполняйте переменную и потом используйте ее в создании записи

Re: Сохранение в базу. Парочка проблем

sibprogsistem wrote:
Alfil wrote:

запись проискодит только если в этот момент активна таблица, то есть если фокус при нажатии клавиши "добавить" находится на SearchPrihTab.


видимо что-то у Вас не корректно настроено..
если не найдете, то сделайте глобальную переменную и при клике по ячейке заполняйте переменную и потом используйте ее в создании записи

Спасибо. Попробую