Topic: Конфликт 2-х db

как правельно подключить вторую SQLite  или конфликт не избежен?

SQLExecute('ATTACH DATABASE ''setting\sqlite.db'' as ''SETTING''');

2 (edited by sibprogsistem 2018-09-13 03:55:36)

Re: Конфликт 2-х db

хотя нет...  Проверил без подключения ко второй базе происходит тоже самое

а именно..

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

если при приеме оборудования от клиента и от компании указать одинаковые параметры оборудования то они тоже в итоге не отображаются

Не могу найти где именно я ошибся..


https://yadi.sk/d/VHZkBV7PZXBfsg

для перехода к карточке оборудования нужно дважду кликнуть пи записи в гриде

скрипт..

//**************************** Карточка оборудования компании ***********************//
procedure frmComServiceList_OnShow (Sender: TObject; Action: string);
begin

     frmComServiceList.eNameCompany.Text := SQLExecute('SELECT NameCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eStreetCompany.Text := SQLExecute('SELECT streetCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eHouseCompany.Text := SQLExecute('SELECT houseCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eFractionCompany.Text := SQLExecute('SELECT fractionCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eOfficeCompany.Text := SQLExecute('SELECT officeCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eTelCompany.Text := SQLExecute('SELECT telCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eNameTypeOfEquipment.Text := SQLExecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eNameManufacturer.Text := SQLExecute('SELECT nameManufacturer FROM manufacturer WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eModel.Text := SQLExecute('SELECT Model FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eSerialNamber.Text := SQLExecute('SELECT SerialNamber FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eEquipment.Text := SQLExecute('SELECT Equipment FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mExternalStatus.Text := SQLExecute('SELECT ExternalStatus FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mDiagnostics.Text := SQLExecute('SELECT Diagnostics FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.cbStatusName.DbItemID := SQLExecute('SELECT id_status FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     frmComServiceList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
     frmComServiceList.bSearchListWork.Click;
end;
//**************************** Карточка оборудования клиента ***********************//
procedure clientServiseList_OnShow (Sender: TObject; Action: string);
begin
     frmClientServiсeList.efirstNameClient.Text := SQLExecute('SELECT firstNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.etwoNameClient.Text := SQLExecute('SELECT twoNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.elastNameClient.Text := SQLExecute('SELECT lastNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eAdresClient.Text := SQLExecute('SELECT adresClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.ePassportSeriesClient.Text := SQLExecute('SELECT passportNamberClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.ePassportNamberClient.Text := SQLExecute('SELECT passportSeriesClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eTelephonClient.Text := SQLExecute('SELECT telephonClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eNameTypeOfEquipment.Text := SQLExecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eNameManufacturer.Text := SQLExecute('SELECT nameManufacturer FROM Manufacturer WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eModel.Text := SQLExecute('SELECT Model FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eSerialNamber.Text := SQLExecute('SELECT SerialNamber FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eEquipment.Text := SQLExecute('SELECT Equipment FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.mExternalStatus.Text := SQLExecute('SELECT ExternalStatus FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.mDiagnostics.Text := SQLExecute('SELECT Diagnostics FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.cbStatusName.DbItemID := SQLExecute('SELECT id_status FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     frmClientServiсeList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
     frmClientServiсeList.bSearchListWork.Click;
end;
 //**************************** Карточка заявки ***********************//
procedure frmAppl_OnShow (Sender: TObject; Action: string);
begin
     frmAppl.cbNameClient.DbItemID := frmServiceCen.tgList.DbItemID;
     frmAppl.eNameClient.Text := frmAppl.cbNameClient.Text;
     frmAppl.eAdresClient.Text := SQLExecute('SELECT adresClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.eTelephonClient.Text := SQLExecute('SELECT telephonClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.dtpDateApplcation.Text := SQLExecute('SELECT dateApplcation FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.dtmTimeApplication.Text := SQLExecute('SELECT timeApplication FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     frmClientServiсeList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
     frmClientServiсeList.bSearchListWork.Click;
end;

Re: Конфликт 2-х db

Я чего-то не пойму... А нельзя ли вместо

     frmComServiceList.eNameCompany.Text := SQLExecute('SELECT NameCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eStreetCompany.Text := SQLExecute('SELECT streetCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eHouseCompany.Text := SQLExecute('SELECT houseCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eFractionCompany.Text := SQLExecute('SELECT fractionCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eOfficeCompany.Text := SQLExecute('SELECT officeCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eTelCompany.Text := SQLExecute('SELECT telCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eNameTypeOfEquipment.Text := SQLExecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eNameManufacturer.Text := SQLExecute('SELECT nameManufacturer FROM manufacturer WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eModel.Text := SQLExecute('SELECT Model FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eSerialNamber.Text := SQLExecute('SELECT SerialNamber FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eEquipment.Text := SQLExecute('SELECT Equipment FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mExternalStatus.Text := SQLExecute('SELECT ExternalStatus FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mDiagnostics.Text := SQLExecute('SELECT Diagnostics FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.cbStatusName.DbItemID := SQLExecute('SELECT id_status FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);

просто настроить кнопку с действием "показать запись"?..

Re: Конфликт 2-х db

полностью не получится, все равно придется часть скрипта использовать..

реньше все работало ок..  Иду пока путем исключения того что делал.. .

5 (edited by sibprogsistem 2018-09-13 09:57:05)

Re: Конфликт 2-х db

пологаю что что-то не так в связи таблиц или же в самой записи..

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

Re: Конфликт 2-х db

На форме frmServiceCen, грид (tgList) заполняется данными из таблицы servise, таким образом

frmServiceCen.tgList.sqlValue

вы получаете id из таблицы servise



Но как видно в данном скрипте, вы используете id записи из таблицы servise для поиска записи из таблицы client, что неправильно.

procedure clientServiseList_OnShow (Sender: TObject; Action: string);
begin
     frmClientServiсeList.efirstNameClient.Text := SQLExecute('SELECT firstNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);

Лучше объясните общими словами, какую проблему вы пытаетесь решить таким образом? Возможно я смогу предложить что-то попроще.

Dmitry.

Re: Конфликт 2-х db

я не могу понять почему при создании первой записи через форму

frmReceivinOgEquipment

  либо

frmNewApplication

в карточке оборудования все поля заполнены а при повторной записи поля с информацией из связанных таблиц не заполняются

Re: Конфликт 2-х db

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

Dmitry.

Re: Конфликт 2-х db

записал видео моих действий так думаю будет понятней

https://yadi.sk/i/QVTZomNG6wFMuw

Re: Конфликт 2-х db

DriveSoft wrote:

На форме frmServiceCen, грид (tgList) заполняется данными из таблицы servise, таким образом

frmServiceCen.tgList.sqlValue

вы получаете id из таблицы servise



Но как видно в данном скрипте, вы используете id записи из таблицы servise для поиска записи из таблицы client, что неправильно.

procedure clientServiseList_OnShow (Sender: TObject; Action: string);
begin
     frmClientServiсeList.efirstNameClient.Text := SQLExecute('SELECT firstNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);

Лучше объясните общими словами, какую проблему вы пытаетесь решить таким образом? Возможно я смогу предложить что-то попроще.

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

то есть мне нужно вывести запись из связвнных таблиц где

id = id_client.servise  т д

Re: Конфликт 2-х db

Лучше объясните общими словами, какую проблему вы пытаетесь решить таким образом? Возможно я смогу предложить что-то попроще.

Dmitry.

12 (edited by sibprogsistem 2018-09-13 16:50:49)

Re: Конфликт 2-х db

есть таблицы
             a                       b                        c               
        ----------             ----------              ----------
             aa                      bb                       cc
             aaa                   id_a                     ccc
             aaaa                 id_c                     cccc

запись происходит либо в b.a  либо в  b.c
в гриде отображается таблица b
мне нужно двойным кликом по гриду паказать запись скриптом в отдельной форме

либо
b
aa
aaa
aaaa
либо
b
cc
ccc
cccc

не знаю как проще это объяснить

Re: Конфликт 2-х db

Думаю проще всего сделать две формы и в зависимости от условий, вызывать необходимую форму с помощью скрипта методом Form.ShowRecord

для

b
aa
aaa
aaaa

    Form2.ShowRecord('TableB', Form1.TableGrid1.dbItemID);


b
cc
ccc
cccc

    Form3.ShowRecord('TableB', Form1.TableGrid1.dbItemID);

Dmitry.

Re: Конфликт 2-х db

нашел у себя еще одну ошибку
у меня сохранение происходит в 2-е таблицы
A B
таблица

A

связана с таблицей

 B

в скрипте сохранение происходило с начало в

A

потом в

B

, в результате таблица

A

не понимала с чем ей связываться...

15 (edited by sibprogsistem 2018-09-18 08:49:19)

Re: Конфликт 2-х db

ну вот и наткнулся на самую не понятную проблему

записывает и отображает все записи

SQLExecute('INSERT INTO servise (dateInServise, id_status, id_Company, id_TypeOfEquipment, id_manufacturer, model, serialNamber, equipment, externalStatus, descriptionATCsWords, id_clCompanyOrApp, record_count) VALUES ("'+tDate+'", "'+tStatusName+'", "'+tNameCompany+'", "'+ tNameTypeOfEquipment + '", "'+tNameManufacturer+'", "'+frmReceivinOgEquipment.eModel.Text+'", "'+frmReceivinOgEquipment.eSerialNamber.Text+ '", "'+frmReceivinOgEquipment.eEquipment.Text+ '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text+ '", "'+ frmReceivinOgEquipment.mExternalStatus.Text+ '", "'+tCompanyOrApp+'", "'+tCount+'")');

записывает но запись таблицы client не отображается хотя в самой таблице запись есть

 SQLExecute('INSERT INTO client (firstNameClient, twoNameClient, lastNameClient, adresClient, telephonClient) VALUES ("'+frmNewApplication.eFirstNameClient.Text+'", "'+frmNewApplication.eTwoNameClient.Text+'", "'+frmNewApplication.eLastNameClient.Text + '", "'+ frmNewApplication.eAdresClient.Text + '", "'+ frmNewApplication.eTelephonClient.Text + '")');
      SQLExecute('INSERT INTO servise (descriptionATCsWords, id_status, dateApplcation, timeApplication, dateInServise, id_clCompanyOrApp) VALUES ("'+ frmNewApplication.mDescriptionOfTheProblem.Text + '", "'+wStatusName+'", "'+wDate+'", "'+wTime+'", "'+qDate+'", "'+wCompanyOrApp+'");');
     

ShowRecord повесил пока в OnShow

запись в строчках от  324 по 429

вывод записи в строчках от 29 по 64


я думаю,что дело в отсутствии связывающего элемента

Post's attachments

Attachment icon service.rar 90.52 kb, 323 downloads since 2018-09-18 

Re: Конфликт 2-х db

проблема решена

добавил ComboBox id_client в качастве связывающего эллемента двух таблиц