Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не выполняется SQL - запрос в связной таблице 
V
    Опции темы
ivanfr
Дата 7.8.2012, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



При формировании запроса(Access)  к таблице Table_of_key_media с TempDataFromMemory[3] содержимым, выводит пустой результат,
хотя данные в таблице есть.

Код

DataModule1.ADOQuery1.SQL.Clear;
DataModule1.ADOQuery1.SQL.ADD('SELECT * FROM Table_of_key_media WHERE Type_Carrier LIKE "%'+TempDataFromMemory[3]+'%"');
DataModule1.ADOQuery1.Open;

Помогите разобраться, почему не работает вышеприведенный код?

таблицы связаны след. образом образом
user posted image
В делфи таблицы тоже связаны и ДБгрид1,2,3 при переключении выводит корректные данные.

Если, например, обращаюсь  так - 
Код

DataModule1.ADOQuery1.SQL.Clear;
DataModule1.ADOQuery1.SQL.ADD('SELECT * FROM persona_stor WHERE tabel_nomer LIKE "%'+TempDataFromMemory[3]+'%"');
DataModule1.ADOQuery1.Open;
 
то все работает.


Это сообщение отредактировал(а) ivanfr - 8.8.2012, 05:50
PM MAIL   Вверх
kami
Дата 7.8.2012, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Нет строк, удовлетворяющих условию Like ?
PM MAIL WWW   Вверх
ivanfr
Дата 7.8.2012, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Ага. А в базе смотрю они есть.
PM MAIL   Вверх
kami
Дата 7.8.2012, 14:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Чудес не бывает smile Почти  smile 

Прямой запрос в Access-е, с подстановкой вместо TempDataFromMemory[3] его значения, выдаст результат?

Добавлено через 4 минуты и 57 секунд
Цитата(ivanfr @  7.8.2012,  12:14 Найти цитируемый пост)
В делфи таблицы тоже связаны

И кстати, может не ADOQuery1, а ADOQuery2 ? Чтобы не нарушать связи по полям?

Это сообщение отредактировал(а) kami - 7.8.2012, 14:03
PM MAIL WWW   Вверх
baldina
Дата 7.8.2012, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



БД mssql или access? во втором случае спец-символом "любой" является  * а не %
PM MAIL   Вверх
Данкинг
Дата 7.8.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(baldina @  7.8.2012,  15:10 Найти цитируемый пост)
во втором случае спец-символом "любой" является  * а не % 

Кто сказал?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
baldina
Дата 7.8.2012, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(Данкинг @  7.8.2012,  14:35 Найти цитируемый пост)
Кто сказал? 

документация

Добавлено через 54 секунды
недоверчивые могут проверить опытным путем smile
PM MAIL   Вверх
kami
Дата 7.8.2012, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(baldina @  7.8.2012,  15:15 Найти цитируемый пост)
недоверчивые могут проверить опытным путем

Проверяли smile

Цитата

Важно заметить, что подстановочные знаки процентов (%) и подчеркивания (_) языка ANSI SQL доступны только при использовании с ядром Microsoft Jet версии 4.X и с поставщиком Microsoft OLE DB для Jet. При использовании с приложением Microsoft Access или объектами DAO они будут считаться литералами.

Источник
К сожалению не описано, но верно и обратное - символ '*' действует только в Access, а при работе через ADO считается литералом.
PM MAIL WWW   Вверх
baldina
Дата 7.8.2012, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(kami @  7.8.2012,  15:27 Найти цитируемый пост)
но верно и обратное - символ '*' действует только в Access, а при работе через ADO считается литералом

буду знать.. но ты прав, чудес не бывает
PM MAIL   Вверх
Данкинг
Дата 7.8.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Вот у меня работающий код:
Код

zap:='select disk,info from spisok where info like "%'+ss+'%" or info like "%'+sss+'%" or info like "%'+sss+'%" order by info';



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
ivanfr
Дата 8.8.2012, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Попробовал по серийному номеру ключ 
Код

ADOQuery1.SQL.ADD('SELECT * FROM Table_of_key_media WHERE Type_Carrier LIKE "%'+'e00630FGE'+'%"');


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

user posted image

Данные в БД access
user posted image

Все равно не работает

Это сообщение отредактировал(а) ivanfr - 8.8.2012, 09:35
PM MAIL   Вверх
baldina
Дата 8.8.2012, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(Данкинг @  7.8.2012,  19:26 Найти цитируемый пост)
info like "%'+sss+'%" or info like "%'+sss+'%"

для надежности?

Цитата(ivanfr @  8.8.2012,  09:06 Найти цитируемый пост)
Результат, пустой Поля соответсвуют таблице

моя твоя понимайтен

Цитата(ivanfr @  8.8.2012,  09:06 Найти цитируемый пост)
Type_Carrier LIKE "%'+'e00630FGE'+'%"'

судя по скриншоту ему лайк Serial_Number...

PM MAIL   Вверх
ivanfr
Дата 8.8.2012, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Цитата


Цитата(Данкинг @  7.8.2012,  19:26 )
info like "%'+sss+'%" or info like "%'+sss+'%"

or - Так делать нельзя.
Запрос делаю по 7 полям, если они совпадают, то я считаю, что в БД уже есть такая запись, следовательно, вносить ее повторно не нужно.

Цитата

Цитата(ivanfr @  8.8.2012,  09:06 )
Type_Carrier LIKE "%'+'e00630FGE'+'%"'
судя по скриншоту ему лайк Serial_Number...

Не сообразил, что хочешь сказать?
Код

   DataModule1.ADOQuery1.SQL.Clear;
      DataModule1.ADOQuery1.SQL.ADD('SELECT * FROM Table_of_key_media WHERE Type_Carrier LIKE "%'+ TempDataFromMemory[2]+
                                     '%" and Serial_Number_Carrier LIKE "%'+ TempDataFromMemory[3]+
                                     '%" and Issued_Keys LIKE "%'+TempDataFromMemory[5]+
                                     '%" and Name_Of_The_Holder_Of_The_Keys LIKE "%'+ TempDataFromMemory[6]+
                                     '%" and Employee_Number_Key_Holder LIKE "%'+ TempDataFromMemory[7]+
                                     '%" and Position_Or_Location_Key LIKE "%'+ TempDataFromMemory[8]+
                                     '%" and Workstation_Installation_Inventory_Number LIKE "%'+ TempDataFromMemory[9]+
                                     '%" and Type_Key LIKE "%'+ TempDataFromMemory[11]+
                                     '%" and Date_Of_Issue_Of_Key_Media LIKE "%'+ TempDataFromMemory[12]+
                                     '%" and Date_of_delivery_of_key LIKE "%'+ TempDataFromMemory[14]+
                                     '%" and Date_Of_Last_Inspection LIKE "%'+ TempDataFromMemory[15]+
                                     '%" and Integrity_Of_The_Sealing LIKE "%'+ TempDataFromMemory[16]+
                                     '%" and Order_Of_The_Key_Storage_Medium LIKE "%'+ TempDataFromMemory[17]+
                                     '%" and Comment LIKE "%'+TempDataFromMemory[18]+'%"');
     DataModule1.ADOQuery1.Open;

вот сообсвтвенно сам запрос который выводит пустое значение.


Это сообщение отредактировал(а) ivanfr - 8.8.2012, 09:50
PM MAIL   Вверх
baldina
Дата 8.8.2012, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



на скриншоте вижу кусочек данных в поле Serial_Number - 'e00...', в поле Type_Carrier - 'eToken RPC'
а в твоем запросе Type_Carrier сравнивается с e00630FGE

ЗЫ:ты бы нормально показал свои данные
PM MAIL   Вверх
ivanfr
Дата 8.8.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Ответить там в коде ошибка. 
Код

ADOQuery1.SQL.ADD('SELECT * FROM Table_of_key_media WHERE Serial_Number_Carrier  LIKE "%'+'e00630FGE'+'%"');
 Вот так данные выбираются.

Данные не там искал. 
Сейчас поправил заработало, а вот основном коде, который приведен выше не фурычит.

Смотрю в  Watch list данные соответсвют, тому что находится в таблице в столбцах.

Это сообщение отредактировал(а) ivanfr - 8.8.2012, 09:56
PM MAIL   Вверх
Данкинг
Дата 8.8.2012, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(baldina @  8.8.2012,  10:27 Найти цитируемый пост)
для надежности?

Гы, вероятно. Я даже не заметил сейчас, а что я тогда имел в виду - кто меня знает.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
kami
Дата 8.8.2012, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(ivanfr @  8.8.2012,  09:41 Найти цитируемый пост)
Запрос делаю по 7 полям, если они совпадают, то я считаю, что в БД уже есть такая запись, следовательно, вносить ее повторно не нужно.

Зачем так?
Код

ALTER TABLE Таблица1 ADD CONSTRAINT myConstraint UNIQUE(Поле1, Поле2)
или
CREATE UNIQUE INDEX IX_TABLEINDEX ON Таблица1 (Поле1, Поле2, Поле3) WITH PRIMARY

И дублирующаяся строка не сможет вставиться.
PM MAIL WWW   Вверх
baldina
Дата 8.8.2012, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(ivanfr @  7.8.2012,  12:14 Найти цитируемый пост)
DataModule1.ADOQuery1.SQL.Clear;
DataModule1.ADOQuery1.SQL.ADD('SELECT * FROM Table_of_key_media WHERE Type_Carrier LIKE "%'+TempDataFromMemory[3]+'%"');
DataModule1.ADOQuery1.Open;

все-таки, как выглядит итоговая строка, которая передается в ADD()?
как выглядит хотя бы одна запись в базе, соответствующая этому where?
ошибка где-то рядом... 
кстати, если в этой строчке вообще убрать where, результаты будут?
PM MAIL   Вверх
ivanfr
Дата 8.8.2012, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Итоговая строка выглядит так:


Код
begin 
  
  TempDataFromMemory[2]:='eToken PRO (Java)/72K CERT-1883';
  TempDataFromMemory[3]:='e00858585';
  TempDataFromMemory[5]:='Сидоров С.С.';
  TempDataFromMemory[6]:='Иванов Иван Иванович';
  TempDataFromMemory[7]:='35126';
  TempDataFromMemory[8]:='Ленина 1';
  TempDataFromMemory[9]:='ПК 1';
  TempDataFromMemory[11]:='Основной комплект';
  TempDataFromMemory[12]:='01.08.2012';
  //TempDataFromMemory[14]:='';
  //TempDataFromMemory[15]:='';
  //TempDataFromMemory[16]:='';
  TempDataFromMemory[17]:='Сейф';

DataModule1.ADOQuery1.SQL.Clear;
      DataModule1.ADOQuery1.SQL.ADD('SELECT * FROM Table_of_key_media WHERE Type_Carrier LIKE "%'+ TempDataFromMemory[2]+
                                     '%" and Serial_Number_Carrier LIKE "%'+ TempDataFromMemory[3]+
                                     '%" and Issued_Keys LIKE "%'+TempDataFromMemory[5]+
                                     '%" and Name_Of_The_Holder_Of_The_Keys LIKE "%'+ TempDataFromMemory[6]+
                                     '%" and Employee_Number_Key_Holder LIKE "%'+ TempDataFromMemory[7]+
                                     '%" and Position_Or_Location_Key LIKE "%'+ TempDataFromMemory[8]+
                                     '%" and Workstation_Installation_Inventory_Number LIKE "%'+ TempDataFromMemory[9]+
                                     '%" and Type_Key LIKE "%'+ TempDataFromMemory[11]+
                                     '%" and Date_Of_Issue_Of_Key_Media LIKE "%'+ TempDataFromMemory[12]+
                                     '%" and Date_of_delivery_of_key LIKE "%'+ TempDataFromMemory[14]+
                                     '%" and Date_Of_Last_Inspection LIKE "%'+ TempDataFromMemory[15]+
                                     '%" and Integrity_Of_The_Sealing LIKE "%'+ TempDataFromMemory[16]+
                                     '%" and Order_Of_The_Key_Storage_Medium LIKE "%'+ TempDataFromMemory[17]+
                                     '%" and Comment LIKE "%'+TempDataFromMemory[18]+'%"');
     DataModule1.ADOQuery1.Open;

Тут из базы.
user posted image
а тут после запроса выше приведенного кода.
user posted image
Вот так выводит запись работает.
 
Код

      DataModule1.ADOQuery1.SQL.ADD('SELECT * FROM Table_of_key_media');
 
Как будет реагировать бд если внее будут летететь пустые   
Код


TempDataFromMemory : Array[0..22] of WideString; 
поля  ?
Код


 '%" and Date_of_delivery_of_key LIKE "%'+ TempDataFromMemory[14]+
'%" and Date_Of_Last_Inspection LIKE "%'+ TempDataFromMemory[15]+
'%" and Integrity_Of_The_Sealing LIKE "%'+ TempDataFromMemory[16]+
  

Это сообщение отредактировал(а) ivanfr - 8.8.2012, 12:00
PM MAIL   Вверх
baldina
Дата 8.8.2012, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(ivanfr @  8.8.2012,  11:30 Найти цитируемый пост)
Итоговая строка выглядит так:

это не итоговая. покажи что получается после подстановки TempDataFromMemory и соответствующую ей запись в БД
PM MAIL   Вверх
ivanfr
Дата 8.8.2012, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Смотрите выше я отредактировал предыдущее сообщение.
PM MAIL   Вверх
baldina
Дата 8.8.2012, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



итоговую Вы так и не показали)))
ну да ладно

Цитата(ivanfr @  8.8.2012,  11:30 Найти цитируемый пост)
TempDataFromMemory[2]:='eToken PRO (Java)/72K CERT-1883';

а в таблице 'eToken RPC...'

в общем не морочьте нам голову, проверяйте свои входные данные.

еще: у Вас все поля текстовые?
и еще: зачем весь этот цирк со сравнением множества полей? идентификатором записи служит id, его и используйте.

Добавлено через 3 минуты и 52 секунды
Цитата(ivanfr @  8.8.2012,  11:30 Найти цитируемый пост)
Как будет реагировать бд если внее будут летететь пустые поля  ?

если это эквивалентно любому значению, нормально будет реагировать.
если отсутствию значения - ненормально.
лучше так не делать. используйте в предложении where только те поля, по которым сравнение действительно нужно.
PM MAIL   Вверх
ivanfr
Дата 8.8.2012, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Цитата

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

Цитата(ivanfr @  8.8.2012,  11:30 )
TempDataFromMemory[2]:='eToken PRO (Java)/72K CERT-1883';
а в таблице 'eToken RPC...'

Да там в столбце  Type_Carrier  содержится.
вот рисунок из БД
user posted image

Цитата

еще: у Вас все поля текстовые?
и еще: зачем весь этот цирк со сравнением множества полей? идентификатором записи служит id, его и используйте.

Можно увидеть из этотого рисунка
user posted image

Весь этот цирк нужен, для того чтобы в таблицу не попали одинаковые ключевые носители. Как я программе объясню? только путём сравнения всех параметров если они совпадут, то это будет тот же ключевой носитель.
особенность в том, что есть КНИ без номеров и в таблице не могу выбрать ключевое поле(уникальное). Любое из всех может повторяться, но не в совокупности вместе взятые. В бд данные попадают из xls где переодически обновляется инфа.

Это сообщение отредактировал(а) ivanfr - 8.8.2012, 14:07
PM MAIL   Вверх
baldina
Дата 8.8.2012, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



если это ключ, вам требуется строгое сравнение, а не like. и почему вы сравниваете все как строки? сравнивайте числа как числа.

отключайте все свои условия, включайте по одному и выполняйте запросы - так найдете то, которое не подходит. начните с полей где дата хранится. данные для сравнения полей datetime делайте в формате 'ГГГГ/ММ/ДД'
PM MAIL   Вверх
kami
Дата 8.8.2012, 14:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(ivanfr @  8.8.2012,  13:54 Найти цитируемый пост)
Как я программе объясню? только путём сравнения всех параметров если они совпадут, то это будет тот же ключевой носитель.особенность в том, что есть КНИ без номеров и в таблице не могу выбрать ключевое поле(уникальное). Любое из всех может повторяться, но не в совокупности вместе взятые. 


Я уже ответил на этот вопрос.

Код

ALTER TABLE Таблица1 ADD CONSTRAINT myConstraint UNIQUE(Поле1, Поле2)
или
CREATE UNIQUE INDEX IX_TABLEINDEX ON Таблица1 (Поле1, Поле2, Поле3) WITH PRIMARY

PM MAIL WWW   Вверх
kami
Дата 8.8.2012, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



В дополнение (к исполнению обязательно):
Заменить всё на параметры в запросе. Хотя бы даты. Ибо по умолчанию в Access стоит формат даты "мм.дд.гггг". 
Соответственно, в приведенном примере TempDataFromMemory[12] интерпретируется как "8 января 2012 года";

 Однако, это только на тех компьютерах, которые мне встречались, так что не факт, что где-то не встретится какой-либо другой формат. Параметр же передается вне зависимости от строкового отображения даты.
PM MAIL WWW   Вверх
ivanfr
Дата 23.8.2012, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Заменил на запрос с параметрами теперь работает, как надо!
Привожу код
Код

DataModule1.ADOQuery1.SQL.Text:=' SELECT *'+
    ' FROM Table_of_key_media'+
    ' WHERE Type_Carrier = :Parameters_Type_Carrier' +
    ' AND Serial_Number_Carrier = :Parameters_Serial_Number_Carrier' +
    ' AND Issued_Keys = :Parameters_Issued_Keys'+
    ' AND Name_Of_The_Holder_Of_The_Keys = :Parameters_Name_Of_The_Holder_Of_The_Keys' +
    ' AND Employee_Number_Key_Holder = :Parameters_Employee_Number_Key_Holder'+
    ' AND Position_Or_Location_Key = :Parameters_Position_Or_Location_Key'+
    ' AND Workstation_Installation_Inventory_Number = :Parameters_Workstation_Installation_Inventory_Number'+
    ' AND Type_Key = :Parameters_Type_Key'+
    ' AND Date_Of_Issue_Of_Key_Media = :Parameters_Date_Of_Issue_Of_Key_Media'+
    ' AND Order_Of_The_Key_Storage_Medium = :Parameters_Order_Of_The_Key_Storage_Medium'+
    ' AND Comment = :Parameters_Comment';
  //Параметры запроса
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Type_Carrier').Value:=TempDataFromMemory[2];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Serial_Number_Carrier').Value:=TempDataFromMemory[3];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Issued_Keys').Value:=TempDataFromMemory[5];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Name_Of_The_Holder_Of_The_Keys').Value:=TempDataFromMemory[6];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Employee_Number_Key_Holder').Value:=TempDataFromMemory[7];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Position_Or_Location_Key').Value:=TempDataFromMemory[8];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Workstation_Installation_Inventory_Number').Value:=TempDataFromMemory[9];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Type_Key').Value:=TempDataFromMemory[11];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Date_Of_Issue_Of_Key_Media').Value:= StrToDate(TempDataFromMemory[12]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Order_Of_The_Key_Storage_Medium').Value:=TempDataFromMemory[17];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Comment').Value:=TempDataFromMemory[18];
  //Выполнение зароса
  DataModule1.ADOQuery1.Open;


Прошу рассмотреть на  ошибки и внести замечания.

Это сообщение отредактировал(а) ivanfr - 24.8.2012, 06:55
PM MAIL   Вверх
ivanfr
  Дата 24.8.2012, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Помогите с ошибкой!
Код

DataModule1.ADOQuery1.SQL.Text:=' SELECT *'+
    ' FROM Table_of_key_media'+
    ' WHERE Type_Carrier = :Parameters_Type_Carrier' +
    ' AND Serial_Number_Carrier = :Parameters_Serial_Number_Carrier' +
    ' AND Issued_Keys = :Parameters_Issued_Keys'+
    ' AND Name_Of_The_Holder_Of_The_Keys = :Parameters_Name_Of_The_Holder_Of_The_Keys' +
    ' AND Employee_Number_Key_Holder = :Parameters_Employee_Number_Key_Holder'+
    ' AND Position_Or_Location_Key = :Parameters_Position_Or_Location_Key'+
    ' AND Workstation_Installation_Inventory_Number = :Parameters_Workstation_Installation_Inventory_Number'+
    ' AND Type_Key = :Parameters_Type_Key'+
    ' AND Date_Of_Issue_Of_Key_Media = :Parameters_Date_Of_Issue_Of_Key_Media'+
    ' AND Order_Of_The_Key_Storage_Medium = :Parameters_Order_Of_The_Key_Storage_Medium'+
    ' AND Comment = :Parameters_Comment';//Без этой строки работает.
DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Type_Carrier').Value:=TempDataFromMemory[2];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Serial_Number_Carrier').Value:=TempDataFromMemory[3];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Issued_Keys').Value:=TempDataFromMemory[5];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Name_Of_The_Holder_Of_The_Keys').Value:=TempDataFromMemory[6];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Employee_Number_Key_Holder').Value:=TempDataFromMemory[7];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Position_Or_Location_Key').Value:=TempDataFromMemory[8];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Workstation_Installation_Inventory_Number').Value:=TempDataFromMemory[9];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Type_Key').Value:=TempDataFromMemory[11];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Date_Of_Issue_Of_Key_Media').Value:= StrToDate(TempDataFromMemory[12]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Order_Of_The_Key_Storage_Medium').Value:=TempDataFromMemory[17];
  DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Comment').Value:=TempDataFromMemory[18];// без этой строки работает


В чём может быть пробмема, убираю эти строки из кода и данные из БД выбираются.  Если добавляю результат пустые значения. 
ставлю в ячейку БД значение "1", оставляю  нижеприведенный  код работает.  
Код

AND Comment = :Parameters_Comment';
DataModule1.ADOQuery1.Parameters.ParamByName('Parameters_Comment').Value:=TempDataFromMemory[18];// без этой строки 

PM MAIL   Вверх
kami
Дата 24.8.2012, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Вам уже несколько раз сказали, что нужен не Y а X.
А все эти многокилометровые запросы с кучей AND - лишняя нагрузка на СУБД.

Это сообщение отредактировал(а) kami - 24.8.2012, 23:36
PM MAIL WWW   Вверх
ivanfr
Дата 27.8.2012, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Хорошо.
Объясните мне не компетентному, что это такое(нижеприведённый код SQL) и как это мне поможет в решении моей проблемы?
Почему, ваше решение  должно работать? 
Код

ALTER TABLE Таблица1 ADD CONSTRAINT myConstraint UNIQUE(Поле1, Поле2)
или
CREATE UNIQUE INDEX IX_TABLEINDEX ON Таблица1 (Поле1, Поле2, Поле3) WITH PRIMAR

Как я программе объясню? только путём сравнения всех параметров если они совпадут, то это будет тот же ключевой носитель. особенность в том, что есть КНИ без номеров и в таблице не могу выбрать ключевое поле(уникальное). Любое из всех может повторяться, но не в совокупности вместе взятые. 
Я уже ответил на этот вопрос.


Это сообщение отредактировал(а) ivanfr - 27.8.2012, 08:11
PM MAIL   Вверх
kami
Дата 27.8.2012, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(ivanfr @  27.8.2012,  08:05 Найти цитируемый пост)
Объясните мне не компетентному, что это такое(нижеприведённый код SQL) и как это мне поможет в решении моей проблемы?

Не нужно программе ничего объяснять. Приведенный мной SQL-код создает ограничение - СУБД не сможет добавить запись в таблицу, если в ней уже есть аналогичная. По каким полям производить сравнение - подставляется вместо (Поле1, Поле2). Можете хоть все поля таблицы перечислить через запятую.
Таким образом, после добавления Constraint задача будет сведена к следующему:
Код

try
  попытка_добавить_запись_в_таблицу
except
  показ_пользователю_что_такая_запись_уже_есть
end;

И всё. Не нужно никаких формирований лишних запросов, выборок, сравнений с добавляемым и так далее и тому подобное. Всю эту нагрузку возьмет на себя СУБД.
А вообще, уважаемый, за столько времени можно уже было почитать справку о том, что такое CONSTRAINT и с чем его едят.
Цитата(ivanfr @  27.8.2012,  08:05 Найти цитируемый пост)
Почему, ваше решение  должно работать? 

Потому что прежде чем писать его сюда, я просмотрел справку к Access, увидел нужный синтаксис, создал тестовую таблицу, ввел ограничение и попробовал добавить одинаковые записи. В отличие от вас.
PM MAIL WWW   Вверх
ivanfr
  Дата 28.8.2012, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Буду учиться. 
Так как мне нет необходимости в создании таблицы, то я беру вот эту строку:
Код

ALTER TABLE Таблица1 ADD CONSTRAINT myConstraint UNIQUE(Поле1, Поле2)

в Место:
1)"Таблица1" -" Table_of_key_media"
2)"myConstraint" - не понял что это такое. Смотрел в  примерах стоит всегда другое значение нe связанное с таблицей, например, 
 
Код
ALTER TABLE dbo.Presidents ADD CONSTRAINT President_unique UNIQUE (President) 

Код
 ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

3)"UNIQUE(Поле1, Поле2)" - UNIQUE(Type_Carrier, Serial_Number_Carrier, Issued_Keys, Name_Of_The_Holder_Of_The_Keys,+
                   'Employee_Number_Key_Holder, Position_Or_Location_Key, Workstation_Installation_Inventory_Number,'+
                   'Type_Key, Date_Of_Issue_Of_Key_Media, Date_of_delivery_of_key, Date_Of_Last_Inspection,'+
                   'Integrity_Of_The_Sealing, Order_Of_The_Key_Storage_Medium, Comments )'; 
И должно получиться следующее:
Параметры оставлять и использовать insert нужно? 
Код

try 
TempDataFromMemory[1]:='Отправка данных';
  TempDataFromMemory[2]:='eToken PRO (Java)/72K CERT-1883';
  TempDataFromMemory[3]:='e00858585';
  TempDataFromMemory[4]:='Шифрование, ЭЦП';
  TempDataFromMemory[5]:='Иванов И.И.';
  TempDataFromMemory[6]:='Петров Петр Петрович';
  TempDataFromMemory[7]:='25';
  TempDataFromMemory[8]:='Ленина 1';
  TempDataFromMemory[9]:='ПК 1';
  TempDataFromMemory[10]:='25 64 34 34';
  TempDataFromMemory[11]:='Основной комплект';
  TempDataFromMemory[12]:='';
  TempDataFromMemory[13]:='1 год';
  TempDataFromMemory[14]:='';
  TempDataFromMemory[15]:='Шкаф';
  TempDataFromMemory[16]:='';
  TempDataFromMemory[17]:='01.08.2012';
  TempDataFromMemory[18]:='';
  TempDataFromMemory[19]:='28.10.2011';
  TempDataFromMemory[20]:='28.10.2011';
  TempDataFromMemory[21]:='28.10.2012';
  TempDataFromMemory[22]:='';   
DataModule1.ADOQuery1.SQL.Text:='ALTER TABLE Table_of_key_media ADD CONSTRAINT Id_Tabele_of_Key_Media'+
                   'UNIQUE(Type_Carrier, Serial_Number_Carrier, Issued_Keys, Name_Of_The_Holder_Of_The_Keys,'+
                   'Employee_Number_Key_Holder, Position_Or_Location_Key, Workstation_Installation_Inventory_Number,'+
                   'Type_Key, Date_Of_Issue_Of_Key_Media, Date_of_delivery_of_key, Date_Of_Last_Inspection,'+
                   'Integrity_Of_The_Sealing, Order_Of_The_Key_Storage_Medium, Comments )';   //запись

         DataModule1.ADOTable_of_Key_Media.FieldByName('Type_Carrier').AsString:=TempDataFromMemory[2];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Serial_Number_Carrier').AsString:=TempDataFromMemory[3];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Issued_Keys').AsString:=TempDataFromMemory[5];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Name_Of_The_Holder_Of_The_Keys').AsString:=TempDataFromMemory[6];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Employee_Number_Key_Holder').AsString:=TempDataFromMemory[7];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Position_Or_Location_Key').AsString:=TempDataFromMemory[8];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Workstation_Installation_Inventory_Number').AsString:=TempDataFromMemory[9];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Type_Key').AsString:=TempDataFromMemory[11];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Date_Of_Issue_Of_Key_Media').AsDateTime:=StrToDate(TempDataFromMemory[12]);
         DataModule1.ADOTable_of_Key_Media.FieldByName('Date_of_delivery_of_key').AsDateTime:=StrToDate(TempDataFromMemory[14]);
         DataModule1.ADOTable_of_Key_Media.FieldByName('Date_Of_Last_Inspection').AsDateTime:=StrToDate(TempDataFromMemory[15]);
         DataModule1.ADOTable_of_Key_Media.FieldByName('Integrity_Of_The_Sealing').AsString:=TempDataFromMemory[16];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Order_Of_The_Key_Storage_Medium').AsString:=TempDataFromMemory[17];
         DataModule1.ADOTable_of_Key_Media.FieldByName('Comments').AsString:=TempDataFromMemory[18];
         //DataModule1.ADOTable_Key_User.FieldByName('Order').AsString:=TempDataFromMemory[21];
        DataModule1.ADOTable_of_Key_Media.post;
      
      except
          ShowMessage('Такая запсь существует')//Ошибка записи
      end;

user posted image

Не совсем понятно, как добавить в связную таблицу оставшиеся данные.
По логике  
Код
ALTER TABLE Таблица1 ADD CONSTRAINT myConstraint UNIQUE(Поле1, Поле2)
 код тот же, только необходимо получить индекс строки ключевого носителя из схемы данных видно, в который будет добавлен ключ?

Прошу Вас объяснить моменты, которые я не понимаю. 


Это сообщение отредактировал(а) ivanfr - 28.8.2012, 11:05
PM MAIL   Вверх
kami
Дата 28.8.2012, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(ivanfr @  28.8.2012,  09:53 Найти цитируемый пост)
Так как мне нет необходимости в создании таблицы, то я беру вот эту строку:

да.
Цитата(ivanfr @  28.8.2012,  09:53 Найти цитируемый пост)
"myConstraint" - не понял что это такое. 

А нужно смотреть не в примерах, а в описании самого оператора и особенно - в ремарках. Хелп пересказывать не буду. 
Цитата(ivanfr @  28.8.2012,  09:53 Найти цитируемый пост)
И должно получиться следующее:

нет.
Цитата(kami @  27.8.2012,  11:59 Найти цитируемый пост)
 после добавления Constraint задача будет сведена к следующему:

Читаем. Смотрим еще раз на синтаксис ALTER TABLE. Думаем. Смотрим на выделенное жирным шрифтом. Опять думаем
И понимаем, что этот SQL оператор нужно/можно выполнить непосредственно в Access ОДИН раз при создании БД. А потом пользоваться обычным INSERT INTO с его параметрами.
Кстати, по поводу исключения могу ошибаться - возможно, ADOQuery.ExecSQL при добавлении записи в таблицу просто вернет 0 вместо 1. Но сути дела это не меняет.

Цитата(ivanfr @  28.8.2012,  09:53 Найти цитируемый пост)
Не совсем понятно, как добавить в связную таблицу оставшиеся данные.

Если добавление было успешно, то следующий запрос "SELECT @@IDENTITY" вернет ID добавленной записи в том случае, если ID поле - автоинкрементное.
PM MAIL WWW   Вверх
ivanfr
Дата 24.9.2012, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Ура!!! наконце получилось!
Как делал: 
1)нашёл эту статью где все понятно написано ссылка:http://office.microsoft.com/ru-ru/access-h...A010341600.aspx
Выполнил по пунктно
Цитата

Ограничения на несколько полей
Предложение CONSTRAINT для нескольких полей можно использовать только вне предложения определения полей. Оно имеет следующий синтаксис:
CONSTRAINT имя_ограничения 
{PRIMARY KEY (поле_пк1[, поле_пк2[, ...]]) |
 UNIQUE (уник1[, уник2[, ...]]) |
 NOT NULL (не_нулев1[, не_нулев2[, ...]]) |
 FOREIGN KEY [NO INDEX] (ссыл_поле1[, ссыл_поле2[, ...]]) 
  REFERENCES внешняя_таблица 
  [(поле_внешнего_ключа1[, поле_внешнего_ключа2[, ...]])] |
 [ON UPDATE {CASCADE | SET NULL}]
 [ON DELETE {CASCADE | SET NULL}]}
Рассмотрим еще один пример с таблицей Cars. Предположим, что необходимо обеспечить, чтобы в двух различных записях в таблице Cars не совпадали сочетания значений марки, года, состояния и цены. С этой целью можно создать для этих полей ограничение UNIQUE, выполнив указанные ниже действия.
1) На вкладке Создание нажмите в группе Макросы и код кнопку Конструктор запросов.
2) Закройте диалоговое окно Добавление таблицы.
3) На вкладке Конструктор в группе Тип запроса щелкните элемент Определение данных.
4) Сетка конструктора пропадет, появится вкладка объекта режима SQL.
5) Введите следующую инструкцию SQL:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (name, year, condition, price)
в моем в моем случае я ввел: 
ALTER TABLE Table_of_key_media ADD CONSTRAINT NoDupesKey UNIQUE (Type_Carrier,Serial_Number_Carrier,Issued_Keys,Name_Of_The_Holder_Of_The_Keys,Employee_Number_Key_Holder,Position_Or_Location_Key,Workstation_Installation_Inventory_Number,Type_Key,Date_Of_Issue_Of_Key_Media,Order_Of_The_Key_Storage_Medium)
6) На вкладке Конструктор в группе Результаты выберите команду Запуск.
Затем 

Запускаю в Delphi следующий код:
Код

TempDataFromMemory[0]:='';
  TempDataFromMemory[1]:='Данные';
  TempDataFromMemory[2]:='RuToken';
  TempDataFromMemory[3]:='765095619035029';
  TempDataFromMemory[4]:='Шифрование, ЭЦП1';
  TempDataFromMemory[5]:='Сидоров Петр Иванович';
  TempDataFromMemory[6]:='Иванов Иван Ивановича.';
  TempDataFromMemory[7]:='7654';
  TempDataFromMemory[8]:='Ленина 1, дом 1';
  TempDataFromMemory[9]:='ПК01';
  TempDataFromMemory[10]:='87838ПРУ381';
  TempDataFromMemory[11]:='Сертификат1';
  TempDataFromMemory[12]:='09.11.2012';
  TempDataFromMemory[13]:='1 год1';
  TempDataFromMemory[14]:='';
  TempDataFromMemory[15]:='';
  TempDataFromMemory[16]:='';
  TempDataFromMemory[17]:='';
  TempDataFromMemory[18]:='';
  TempDataFromMemory[19]:='09.11.2013';
  TempDataFromMemory[20]:='28.10.2012';
  TempDataFromMemory[21]:='28.10.2013';
  TempDataFromMemory[22]:='';

 DataModule1.ADOTable_of_Key_Media.Insert;
            if TempDataFromMemory[2]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Type_Carrier').AsString:=TempDataFromMemory[2];
            if TempDataFromMemory[3]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Serial_Number_Carrier').AsString:=TempDataFromMemory[3];
            if TempDataFromMemory[5]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Issued_Keys').AsString:=TempDataFromMemory[5];
            if TempDataFromMemory[6]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Name_Of_The_Holder_Of_The_Keys').AsString:=TempDataFromMemory[6];
            if TempDataFromMemory[7]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Employee_Number_Key_Holder').AsString:=TempDataFromMemory[7];
            if TempDataFromMemory[8]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Position_Or_Location_Key').AsString:=TempDataFromMemory[8];
            if TempDataFromMemory[9]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Workstation_Installation_Inventory_Number').AsString:=TempDataFromMemory[9];
            if TempDataFromMemory[11]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Type_Key').AsString:=TempDataFromMemory[11];
            if (TempDataFromMemory[12]<>'') and (TempDataFromMemory[12]<>'0')
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Date_Of_Issue_Of_Key_Media').AsDateTime:=StrToDate(TempDataFromMemory[12]);
            if (TempDataFromMemory[15]<>'') and (TempDataFromMemory[15]<>'0')
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Date_Of_Last_Inspection').AsDateTime:=StrToDate(TempDataFromMemory[15]);
            if TempDataFromMemory[16]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Integrity_Of_The_Sealing').AsString:=TempDataFromMemory[16];
            if TempDataFromMemory[17]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Order_Of_The_Key_Storage_Medium').AsString:=TempDataFromMemory[17];
            if TempDataFromMemory[18]<>''
              then DataModule1.ADOTable_of_Key_Media.FieldByName('Comments').AsString:=TempDataFromMemory[18];
            //DataModule1.ADOTable_Key_User.FieldByName('Order').AsString:=TempDataFromMemory[21];
           try
            DataModule1.ADOTable_of_Key_Media.post;
           except
             ShowMessage('Ошибка добавления данных: одинаковые поля');
             DataModule1.ADOTable_of_Key_Media.CancelUpdates
           end;

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

kami
Если б сразу сказал, что нужно выполнить SQL запрос в самом Access,  что в итоге позволит создать ограничение на несколько полей уже бы сделал давно. 



Это сообщение отредактировал(а) ivanfr - 24.9.2012, 08:12
PM MAIL   Вверх
kami
Дата 24.9.2012, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



Цитата(ivanfr @  24.9.2012,  07:58 Найти цитируемый пост)
Если б сразу сказал, что нужно выполнить SQL запрос в самом Access,  что в итоге позволит создать ограничение на несколько полей уже бы сделал давно. 

то ли лыжи не едут,...
но:
Цитата(kami @  28.8.2012,  11:37 Найти цитируемый пост)
этот SQL оператор нужно/можно выполнить непосредственно в Access ОДИН раз при создании БД.

 smile 
PM MAIL WWW   Вверх
ivanfr
Дата 25.9.2012, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



На всякий случай добавляю вариант с INSERT INTO 
Код

Procedure WriteBD1();
 var LastRecordingSession:Integer;
 begin {Самое начало}
  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Text:='INSERT INTO Table_of_key_media '
             +'([Type_Carrier],[Serial_Number_Carrier],[Issued_Keys],[Name_Of_The_Holder_Of_The_Keys],'
             +'[Employee_Number_Key_Holder],[Position_Or_Location_Key],[Workstation_Installation_Inventory_Number],'
             +'[Type_Key],[Date_Of_Issue_Of_Key_Media],[Date_of_delivery_of_key],[Date_Of_Last_Inspection],'
             +'[Integrity_Of_The_Sealing],[Order_Of_The_Key_Storage_Medium],[Comments])'
             +'VALUES (:Type_Carrier_Parameters,:Serial_Number_Carrier_Parameters,:Issued_Keys_Parameters,'
             +':Name_Of_The_Holder_Of_The_Keys_Parameters,:Employee_Number_Key_Holder_Parameters,'
             +':Position_Or_Location_Key_Parameters,:Workstation_Installation_Inventory_Number_Parameters,'
             +':Type_Key_Parameters,:Date_Of_Issue_Of_Key_Media_Parameters,:Date_of_delivery_of_key_Parameters,'
             +':Date_Of_Last_Inspection_Parameters,:Integrity_Of_The_Sealing_Parameters,:Order_Of_The_Key_Storage_Medium_Parameters,'
             +':Comments_Parameters)';
     //Параметры запроса
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Carrier_Parameters').Value:=TempDataFromMemory[2];
  DataModule1.ADOQuery1.Parameters.ParamByName('Serial_Number_Carrier_Parameters').Value:=TempDataFromMemory[3];
  DataModule1.ADOQuery1.Parameters.ParamByName('Issued_Keys_Parameters').Value:=TempDataFromMemory[5];
  DataModule1.ADOQuery1.Parameters.ParamByName('Name_Of_The_Holder_Of_The_Keys_Parameters').Value:=TempDataFromMemory[6];
  DataModule1.ADOQuery1.Parameters.ParamByName('Employee_Number_Key_Holder_Parameters').Value:=TempDataFromMemory[7];
  DataModule1.ADOQuery1.Parameters.ParamByName('Position_Or_Location_Key_Parameters').Value:=TempDataFromMemory[8];
  DataModule1.ADOQuery1.Parameters.ParamByName('Workstation_Installation_Inventory_Number_Parameters').Value:=TempDataFromMemory[9];
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Key_Parameters').Value:=TempDataFromMemory[11];
  DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Of_Key_Media_Parameters').Value:= StrToDate(TempDataFromMemory[12]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Date_of_delivery_of_key_Parameters').Value:= StrToDate(TempDataFromMemory[14]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Last_Inspection_Parameters').Value:= StrToDate(TempDataFromMemory[15]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Integrity_Of_The_Sealing_Parameters').Value:=TempDataFromMemory[16];
  DataModule1.ADOQuery1.Parameters.ParamByName('Order_Of_The_Key_Storage_Medium_Parameters').Value:=TempDataFromMemory[17];
  DataModule1.ADOQuery1.Parameters.ParamByName('Comments_Parameters').Value:=TempDataFromMemory[18];
  //Выполнение зароса
  DataModule1.ADOQuery1.ExecSQL;
  DataModule1.ADOQuery1.SQL.Text:='SELECT @@IDENTITY';
  DataModule1.ADOQuery1.Open;
  LastRecordingSession:=DataModule1.ADOQuery1.fields[0].value;

  ShowMessage(inttostr(LastRecordingSession));
  //DataModule1.ADOQuery1.Locate('Id_Tabele_of_Key_Media',LastRecordingSession,[])

  end;{Самый конец}

PM MAIL   Вверх
ivanfr
Дата 26.9.2012, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Помогите довести данный вопрос до логического конца. 
Код

Procedure WriteBD1();
 var LastRecordingSession:Integer;
 begin {Самое начало}
  //ЗАпись информации о КНИ
  LastRecordingSession:=0;
  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Text:='INSERT INTO Table_of_key_media '
    +'([Type_Carrier],[Serial_Number_Carrier],[Issued_Keys],[Name_Of_The_Holder_Of_The_Keys],'
    +'[Employee_Number_Key_Holder],[Position_Or_Location_Key],[Workstation_Installation_Inventory_Number],'
    +'[Type_Key],[Date_Of_Issue_Of_Key_Media],[Date_of_delivery_of_key],[Date_Of_Last_Inspection],'
    +'[Integrity_Of_The_Sealing],[Order_Of_The_Key_Storage_Medium],[Comments])'
    +'VALUES (:Type_Carrier_Parameters,:Serial_Number_Carrier_Parameters,:Issued_Keys_Parameters,'
    +':Name_Of_The_Holder_Of_The_Keys_Parameters,:Employee_Number_Key_Holder_Parameters,'
    +':Position_Or_Location_Key_Parameters,:Workstation_Installation_Inventory_Number_Parameters,'
    +':Type_Key_Parameters,:Date_Of_Issue_Of_Key_Media_Parameters,:Date_of_delivery_of_key_Parameters,'
    +':Date_Of_Last_Inspection_Parameters,:Integrity_Of_The_Sealing_Parameters,:Order_Of_The_Key_Storage_Medium_Parameters,'
    +':Comments_Parameters)';
     //Параметры запроса
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Carrier_Parameters').Value:=TempDataFromMemory[2];
  DataModule1.ADOQuery1.Parameters.ParamByName('Serial_Number_Carrier_Parameters').Value:=TempDataFromMemory[3];
  DataModule1.ADOQuery1.Parameters.ParamByName('Issued_Keys_Parameters').Value:=TempDataFromMemory[5];
  DataModule1.ADOQuery1.Parameters.ParamByName('Name_Of_The_Holder_Of_The_Keys_Parameters').Value:=TempDataFromMemory[6];
  DataModule1.ADOQuery1.Parameters.ParamByName('Employee_Number_Key_Holder_Parameters').Value:=TempDataFromMemory[7];
  DataModule1.ADOQuery1.Parameters.ParamByName('Position_Or_Location_Key_Parameters').Value:=TempDataFromMemory[8];
  DataModule1.ADOQuery1.Parameters.ParamByName('Workstation_Installation_Inventory_Number_Parameters').Value:=TempDataFromMemory[9];
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Key_Parameters').Value:=TempDataFromMemory[11];
  DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Of_Key_Media_Parameters').Value:= StrToDate(TempDataFromMemory[12]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Date_of_delivery_of_key_Parameters').Value:= StrToDate(TempDataFromMemory[14]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Last_Inspection_Parameters').Value:= StrToDate(TempDataFromMemory[15]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Integrity_Of_The_Sealing_Parameters').Value:=TempDataFromMemory[16];
  DataModule1.ADOQuery1.Parameters.ParamByName('Order_Of_The_Key_Storage_Medium_Parameters').Value:=TempDataFromMemory[17];
  DataModule1.ADOQuery1.Parameters.ParamByName('Comments_Parameters').Value:=TempDataFromMemory[18];
  //Выполнение зароса
  try
    DataModule1.ADOQuery1.ExecSQL;
  except
    // LastRecordingSession:=DataModule1.ADOQuery1.Fields.Fields[0].AsInteger;
    DataModule1.ADOQuery1.SQL.Clear;
    DataModule1.ADOQuery1.SQL.Text:='INSERT INTO Key_User '
      +'([Id_Table_Of_Key_Media],[Name_System],[Appointment_Of_Key_In_The_System],[Issued_Keys],[Name_Of_The_Holder_Of_The_Keys],'
      +'[Number_Of_Key],[Type_Key],[Term_Deysviya_Key_Or_Key_Carrier],[Date_Of_Issue_Identifier],'
      +'[Valid_From],[Valid_To])'
      +'VALUES(:Id_Table_Of_Key_Media_Parameters,:Name_System_Parameters,:Appointment_Of_Key_In_The_System_Parameters,:Issued_Keys_Parameters,'
      +':Name_Of_The_Holder_Of_The_Keys_Parameters,:Number_Of_Key_Parameters,:Type_Key_Parameters,'
      +':Term_Deysviya_Key_Or_Key_Carrier_Parameters,:Date_Of_Issue_Identifier_Parameters,:Valid_From_Parameters,:Valid_To_Parameters)';

    DataModule1.ADOQuery1.Parameters.ParamByName('Id_Table_Of_Key_Media_Parameters').Value:=LastRecordingSession; //ID Записи
    DataModule1.ADOQuery1.Parameters.ParamByName('Name_System_Parameters').Value:=TempDataFromMemory[1];
    DataModule1.ADOQuery1.Parameters.ParamByName('Appointment_Of_Key_In_The_System_Parameters').Value:=TempDataFromMemory[4];
    DataModule1.ADOQuery1.Parameters.ParamByName('Issued_Keys_Parameters').Value:=TempDataFromMemory[5];
    DataModule1.ADOQuery1.Parameters.ParamByName('Name_Of_The_Holder_Of_The_Keys_Parameters').Value:=TempDataFromMemory[6];
    DataModule1.ADOQuery1.Parameters.ParamByName('Number_Of_Key_Parameters').Value:=TempDataFromMemory[10];
    DataModule1.ADOQuery1.Parameters.ParamByName('Type_Key_Parameters').Value:=TempDataFromMemory[11];
    DataModule1.ADOQuery1.Parameters.ParamByName('Term_Deysviya_Key_Or_Key_Carrier_Parameters').Value:=TempDataFromMemory[13];
    DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Identifier_Parameters').Value:=StrToDate(TempDataFromMemory[19]);
    DataModule1.ADOQuery1.Parameters.ParamByName('Valid_From_Parameters').Value:=StrToDate(TempDataFromMemory[20]);
    DataModule1.ADOQuery1.Parameters.ParamByName('Valid_To_Parameters').Value:=StrToDate(TempDataFromMemory[21]);
    DataModule1.ADOQuery1.ExecSQL;
  end;//Конеце EXCEPT
  //------------------------Получение ID последней записи-----------------------
  DataModule1.ADOQuery1.SQL.Text:='SELECT @@IDENTITY';//Получаю ID Последней записи
  DataModule1.ADOQuery1.Open;
  LastRecordingSession:=DataModule1.ADOQuery1.Fields[0].Value;
  //------------------------Получение ID последней записи-----------------------
  if LastRecordingSession=0 then
    begin
      ShowMessage('Не удалось получить значение счетчика LastRecordingSession, которое равно'+ inttostr(LastRecordingSession));
      exit;
    end;
  //Запись информации о КИ
  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Text:='INSERT INTO Key_User '
    +'([Id_Table_Of_Key_Media],[Name_System],[Appointment_Of_Key_In_The_System],[Issued_Keys],[Name_Of_The_Holder_Of_The_Keys],'
    +'[Number_Of_Key],[Type_Key],[Term_Deysviya_Key_Or_Key_Carrier],[Date_Of_Issue_Identifier],'
    +'[Valid_From],[Valid_To])'
    +'VALUES(:Id_Table_Of_Key_Media_Parameters,:Name_System_Parameters,:Appointment_Of_Key_In_The_System_Parameters,:Issued_Keys_Parameters,'
    +':Name_Of_The_Holder_Of_The_Keys_Parameters,:Number_Of_Key_Parameters,:Type_Key_Parameters,'
    +':Term_Deysviya_Key_Or_Key_Carrier_Parameters,:Date_Of_Issue_Identifier_Parameters,:Valid_From_Parameters,:Valid_To_Parameters)';
  //DataModule1.ADOQuery1.Parameters.ParamByName('Id_Table_Of_Key_Media_Parameters').Value:=LastRecordingSession; //ID Записи
  DataModule1.ADOQuery1.Parameters.ParamByName('Name_System_Parameters').Value:=TempDataFromMemory[1];
  DataModule1.ADOQuery1.Parameters.ParamByName('Appointment_Of_Key_In_The_System_Parameters').Value:=TempDataFromMemory[4];
  DataModule1.ADOQuery1.Parameters.ParamByName('Issued_Keys_Parameters').Value:=TempDataFromMemory[5];
  DataModule1.ADOQuery1.Parameters.ParamByName('Name_Of_The_Holder_Of_The_Keys_Parameters').Value:=TempDataFromMemory[6];
  DataModule1.ADOQuery1.Parameters.ParamByName('Number_Of_Key_Parameters').Value:=TempDataFromMemory[10];
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Key_Parameters').Value:=TempDataFromMemory[11];
  DataModule1.ADOQuery1.Parameters.ParamByName('Term_Deysviya_Key_Or_Key_Carrier_Parameters').Value:=TempDataFromMemory[13];
  DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Identifier_Parameters').Value:=StrToDate(TempDataFromMemory[19]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Valid_From_Parameters').Value:=StrToDate(TempDataFromMemory[20]);
  DataModule1.ADOQuery1.Parameters.ParamByName('Valid_To_Parameters').Value:=StrToDate(TempDataFromMemory[21]);
  DataModule1.ADOQuery1.ExecSQL;
{
  DataModule1.ADOQuery1.SQL.Text:='SELECT @@IDENTITY';
  DataModule1.ADOQuery1.Open;
  LastRecordingSession:=DataModule1.ADOQuery1.Fields[0].Value; //Получаю ID ТАБЛИЦЫ
  ShowMessage(inttostr(LastRecordingSession));
  DataModule1.ADOQuery1.Locate('Id_Tabele_of_Key_Media',LastRecordingSession,[])
  }
  end;{Самый конец}


user posted image
Рисунок - Схема данных

Сейчас данные добавляются, но не связываются, так как отсутсвуют индексы записи.
Ранее я устанавливал в ДБ Гриде на запись с  locate таблице persona_stor на нужную запись, а затем записывал данные.  Сейчас же запись осуществляется с помощью INSERT INTO и ему нужно предоставить индекс для связи таблиц.
Делаю следующим образом, передаю, пытаюсь записать данные о ключевом носителе информации.
В БД сделал ограничение по 10 столбцам, если совпадают, то запись сделать не возможно.
И далее обрабатывается исключительная ситуация, а именно except, - где я пытаюсь дописать информацию о ключе, если запись не совпадает - то записывается в БД. 
Тут возникает проблема, как узнать все ID нужных мне записей, по которым таблицы связываются друг с другом.
Допустим, после записи я могу сразу получить ID текущей записи, следующим образом: 
Код

//------------------------Получение ID последней записи-----------------------
  DataModule1.ADOQuery1.SQL.Text:='SELECT @@IDENTITY';//Получаю ID Последней записи
  DataModule1.ADOQuery1.Open;
  LastRecordingSession:=DataModule1.ADOQuery1.Fields[0].Value;

Запишу значение  в следующую таблицу (в моём случае Таблица Key_User записи Id_Table_of_Key_Media),  но как узнать ID записи вышестоящей таблицы, а именно  таблицы persona_stor записи Id_persona_stor записав это значение в таблицу Table_of_key_media столбца Id_table_persona_stor?
Есть предположение как это сделать, сформировать sql-запрос на поиск данных из него выбрать id. 
Есть еще вариант с помощью LOCETE установить на запись а затем извлеч ID только не пойму как.
на запись перехожу так:
Код

if DataModule1.ADOTable_persona_stor.Locate('tabel_nomer', Trim(TempDataFromMemory[7]),[loCaseInsensitive,loPartialKey]) then
  begin
    Form2.DBGrid2.SetFocus;
end;

Помогите решить задачу.

Это сообщение отредактировал(а) ivanfr - 26.9.2012, 09:29
PM MAIL   Вверх
kami
Дата 27.9.2012, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 72



После Locate:
Код

id_persona_stor:=DataModule1.ADOTable_persona_stor.FieldByName('id_persona_stor').AsInteger;


Добавлено через 2 минуты и 56 секунд
Ну и соответственно в этот гигантский Insert Into добавляем поле 'id_persona_stor' и значение id_persona_stor
PM MAIL WWW   Вверх
ivanfr
Дата 27.9.2012, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 1.4.2009

Репутация: нет
Всего: нет



Сам разобрался вчера, долго парился..
но все равно спасибо за ответ.

Цитата

kami
После Locate:код Pascal/Delphi
1:
  id_persona_stor:=DataModule1.ADOTable_persona_stor.FieldByName('id_persona_stor').AsInteger;

если так сделать, то он должен добавить индекс только в таблицу КНИ, а в таблицу КИ ничего не добавит и ключ не свяжется.

я сделал так для таблицы КНИ 
Код

  if DataModule1.ADOTable_persona_stor.Locate('tabel_nomer', Trim(TempDataFromMemory[7]),[loCaseInsensitive,loPartialKey]) then
      begin
        Form2.DBGrid2.SetFocus;
        LastRecordingSession:=DataModule1.ADOTable_persona_stor.Fields.Fields[0].AsInteger;// получаю индекс потом, добавляю в insert int
      end
 

а для таблцы КИ  след. образом
Код

if DataModule1.ADOTable_persona_stor.Locate('tabel_nomer', Trim(TempDataFromMemory[7]),[loCaseInsensitive,loPartialKey]) then
      begin
       LastRecordingSession:=DataModule1.ADOTable_Key_User.Fields.Fields[0].AsInteger;


Привожу итоговый код:
Код

Procedure WriteBD1();
 var LastRecordingSession:Integer;
 s:string;
 begin {Самое начало}
  //ЗАпись информации о КНИ
  LastRecordingSession:=0;
  if DataModule1.ADOTable_persona_stor.Locate('tabel_nomer', Trim(TempDataFromMemory[7]),[loCaseInsensitive,loPartialKey]) then
      begin
        Form2.DBGrid2.SetFocus;
        LastRecordingSession:=DataModule1.ADOTable_persona_stor.Fields.Fields[0].AsInteger;
      end;

  //if ((TempDataFromMemory[12]='0')or(TempDataFromMemory[12]='')) then  TempDataFromMemory[12]:='NULL';
  //if (TempDataFromMemory[14]='0')or(TempDataFromMemory[14]='') then  TempDataFromMemory[14]:='NULL';
  //if (TempDataFromMemory[15]='0')or(TempDataFromMemory[15]='') then  TempDataFromMemory[15]:='NULL';

  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Text:='INSERT INTO Table_of_key_media '
    +'([Id_Table_Persona_Stor],[Type_Carrier],[Serial_Number_Carrier],[Issued_Keys],[Name_Of_The_Holder_Of_The_Keys],'
    +'[Employee_Number_Key_Holder],[Position_Or_Location_Key],[Workstation_Installation_Inventory_Number],'
    +'[Type_Key],[Date_Of_Issue_Of_Key_Media],[Date_of_delivery_of_key],[Date_Of_Last_Inspection],'
    +'[Integrity_Of_The_Sealing],[Order_Of_The_Key_Storage_Medium],[Comments])'
    +'VALUES (:Id_Table_Persona_Stor_Parameters,:Type_Carrier_Parameters,:Serial_Number_Carrier_Parameters,:Issued_Keys_Parameters,'
    +':Name_Of_The_Holder_Of_The_Keys_Parameters,:Employee_Number_Key_Holder_Parameters,'
    +':Position_Or_Location_Key_Parameters,:Workstation_Installation_Inventory_Number_Parameters,'
    +':Type_Key_Parameters,:Date_Of_Issue_Of_Key_Media_Parameters,:Date_of_delivery_of_key_Parameters,'
    +':Date_Of_Last_Inspection_Parameters,:Integrity_Of_The_Sealing_Parameters,:Order_Of_The_Key_Storage_Medium_Parameters,'
    +':Comments_Parameters)';
     //Параметры запроса
  DataModule1.ADOQuery1.Parameters.ParamByName('Id_Table_Persona_Stor_Parameters').Value:=LastRecordingSession;
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Carrier_Parameters').Value:=TempDataFromMemory[2];
  DataModule1.ADOQuery1.Parameters.ParamByName('Serial_Number_Carrier_Parameters').Value:=TempDataFromMemory[3];
  DataModule1.ADOQuery1.Parameters.ParamByName('Issued_Keys_Parameters').Value:=TempDataFromMemory[5];
  DataModule1.ADOQuery1.Parameters.ParamByName('Name_Of_The_Holder_Of_The_Keys_Parameters').Value:=TempDataFromMemory[6];
  DataModule1.ADOQuery1.Parameters.ParamByName('Employee_Number_Key_Holder_Parameters').Value:=TempDataFromMemory[7];
  DataModule1.ADOQuery1.Parameters.ParamByName('Position_Or_Location_Key_Parameters').Value:=TempDataFromMemory[8];
  DataModule1.ADOQuery1.Parameters.ParamByName('Workstation_Installation_Inventory_Number_Parameters').Value:=TempDataFromMemory[9];
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Key_Parameters').Value:=TempDataFromMemory[11];
  if ((TempDataFromMemory[12]='0')or(TempDataFromMemory[12]=''))
    then
      DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Of_Key_Media_Parameters').Value:=null
      else
        DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Of_Key_Media_Parameters').Value:=StrToDate(TempDataFromMemory[12]);

  if ((TempDataFromMemory[14]='0')or(TempDataFromMemory[14]=''))
    then
      DataModule1.ADOQuery1.Parameters.ParamByName('Date_of_delivery_of_key_Parameters').Value:=null
      else
        DataModule1.ADOQuery1.Parameters.ParamByName('Date_of_delivery_of_key_Parameters').Value:=StrToDate(TempDataFromMemory[14]);

  if ((TempDataFromMemory[15]='0')or(TempDataFromMemory[15]=''))
    then
      DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Last_Inspection_Parameters').Value:=null
      else
        DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Last_Inspection_Parameters').Value:=StrToDate(TempDataFromMemory[15]);

  DataModule1.ADOQuery1.Parameters.ParamByName('Integrity_Of_The_Sealing_Parameters').Value:=TempDataFromMemory[16];
  DataModule1.ADOQuery1.Parameters.ParamByName('Order_Of_The_Key_Storage_Medium_Parameters').Value:=TempDataFromMemory[17];
  DataModule1.ADOQuery1.Parameters.ParamByName('Comments_Parameters').Value:=TempDataFromMemory[18];
  //Выполнение зароса
  try
    DataModule1.ADOQuery1.ExecSQL;
  except
    // LastRecordingSession:=DataModule1.ADOQuery1.Fields.Fields[0].AsInteger;
    if DataModule1.ADOTable_persona_stor.Locate('tabel_nomer', Trim(TempDataFromMemory[7]),[loCaseInsensitive,loPartialKey]) then
      begin
        //Form2.DBGrid2.SetFocus;
        //LastRecordingSession:=DataModule1.ADOTable_persona_stor.Fields.Fields[0].AsInteger;
        LastRecordingSession:=DataModule1.ADOTable_Key_User.Fields.Fields[0].AsInteger;
        DataModule1.ADOQuery1.SQL.Clear;
        DataModule1.ADOQuery1.SQL.Text:='INSERT INTO Key_User '
              +'([Id_Table_Of_Key_Media],[Name_System],[Appointment_Of_Key_In_The_System],[Issued_Keys],[Name_Of_The_Holder_Of_The_Keys],'
              +'[Number_Of_Key],[Type_Key],[Term_Deysviya_Key_Or_Key_Carrier],[Date_Of_Issue_Identifier],'
              +'[Valid_From],[Valid_To])'
              +'VALUES(:Id_Table_Of_Key_Media_Parameters,:Name_System_Parameters,:Appointment_Of_Key_In_The_System_Parameters,:Issued_Keys_Parameters,'
              +':Name_Of_The_Holder_Of_The_Keys_Parameters,:Number_Of_Key_Parameters,:Type_Key_Parameters,'
              +':Term_Deysviya_Key_Or_Key_Carrier_Parameters,:Date_Of_Issue_Identifier_Parameters,:Valid_From_Parameters,:Valid_To_Parameters)';
        DataModule1.ADOQuery1.Parameters.ParamByName('Id_Table_Of_Key_Media_Parameters').Value:=LastRecordingSession; //ID Записи
        DataModule1.ADOQuery1.Parameters.ParamByName('Name_System_Parameters').Value:=TempDataFromMemory[1];
        DataModule1.ADOQuery1.Parameters.ParamByName('Appointment_Of_Key_In_The_System_Parameters').Value:=TempDataFromMemory[4];
        DataModule1.ADOQuery1.Parameters.ParamByName('Issued_Keys_Parameters').Value:=TempDataFromMemory[5];
        DataModule1.ADOQuery1.Parameters.ParamByName('Name_Of_The_Holder_Of_The_Keys_Parameters').Value:=TempDataFromMemory[6];
        DataModule1.ADOQuery1.Parameters.ParamByName('Number_Of_Key_Parameters').Value:=TempDataFromMemory[10];
        DataModule1.ADOQuery1.Parameters.ParamByName('Type_Key_Parameters').Value:=TempDataFromMemory[11];
        DataModule1.ADOQuery1.Parameters.ParamByName('Term_Deysviya_Key_Or_Key_Carrier_Parameters').Value:=TempDataFromMemory[13];
        if ((TempDataFromMemory[19]='0')or(TempDataFromMemory[19]=''))
          then
            DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Identifier_Parameters').Value:=null
            else
              DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Identifier_Parameters').Value:=StrToDate(TempDataFromMemory[19]);
        if ((TempDataFromMemory[20]='0')or(TempDataFromMemory[20]=''))
          then
            DataModule1.ADOQuery1.Parameters.ParamByName('Valid_From_Parameters').Value:=null
            else
              DataModule1.ADOQuery1.Parameters.ParamByName('Valid_From_Parameters').Value:=StrToDate(TempDataFromMemory[20]);
        if ((TempDataFromMemory[21]='0')or(TempDataFromMemory[21]=''))
          then
            DataModule1.ADOQuery1.Parameters.ParamByName('Valid_To_Parameters').Value:=null
            else
              DataModule1.ADOQuery1.Parameters.ParamByName('Valid_To_Parameters').Value:=StrToDate(TempDataFromMemory[21]);
        try
          DataModule1.ADOQuery1.ExecSQL;
        except
          ShowMessage('Произошла ошибка при добавлении данных в Кey_User на'
          +' данном этапе ключевой носитель с такими параметрами существует'
          +' не получилось добавить КИ. Возможная причина данные с таким КИ'
          +' уже внесены');
          exit
        end;
      end;
  end;//Конеце EXCEPT
  //------------------------Получение ID последней записи-----------------------
  LastRecordingSession:=0;
  DataModule1.ADOQuery1.SQL.Text:='SELECT @@IDENTITY';//Получаю ID Последней записи
  DataModule1.ADOQuery1.Open;
  LastRecordingSession:=DataModule1.ADOQuery1.Fields[0].Value;
  //------------------------Получение ID последней записи-----------------------
  if LastRecordingSession=0 then
    begin
      ShowMessage('Не удалось получить значение счетчика LastRecordingSession, которое равно'+ inttostr(LastRecordingSession));
      exit;
    end;
  //Запись информации о КИ
  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Text:='INSERT INTO Key_User '
    +'([Id_Table_Of_Key_Media],[Name_System],[Appointment_Of_Key_In_The_System],[Issued_Keys],[Name_Of_The_Holder_Of_The_Keys],'
    +'[Number_Of_Key],[Type_Key],[Term_Deysviya_Key_Or_Key_Carrier],[Date_Of_Issue_Identifier],'
    +'[Valid_From],[Valid_To])'
    +'VALUES(:Id_Table_Of_Key_Media_Parameters,:Name_System_Parameters,:Appointment_Of_Key_In_The_System_Parameters,:Issued_Keys_Parameters,'
    +':Name_Of_The_Holder_Of_The_Keys_Parameters,:Number_Of_Key_Parameters,:Type_Key_Parameters,'
    +':Term_Deysviya_Key_Or_Key_Carrier_Parameters,:Date_Of_Issue_Identifier_Parameters,:Valid_From_Parameters,:Valid_To_Parameters)';
  DataModule1.ADOQuery1.Parameters.ParamByName('Id_Table_Of_Key_Media_Parameters').Value:=LastRecordingSession; //ID Записи
  DataModule1.ADOQuery1.Parameters.ParamByName('Name_System_Parameters').Value:=TempDataFromMemory[1];
  DataModule1.ADOQuery1.Parameters.ParamByName('Appointment_Of_Key_In_The_System_Parameters').Value:=TempDataFromMemory[4];
  DataModule1.ADOQuery1.Parameters.ParamByName('Issued_Keys_Parameters').Value:=TempDataFromMemory[5];
  DataModule1.ADOQuery1.Parameters.ParamByName('Name_Of_The_Holder_Of_The_Keys_Parameters').Value:=TempDataFromMemory[6];
  DataModule1.ADOQuery1.Parameters.ParamByName('Number_Of_Key_Parameters').Value:=TempDataFromMemory[10];
  DataModule1.ADOQuery1.Parameters.ParamByName('Type_Key_Parameters').Value:=TempDataFromMemory[11];
  DataModule1.ADOQuery1.Parameters.ParamByName('Term_Deysviya_Key_Or_Key_Carrier_Parameters').Value:=TempDataFromMemory[13];
  if ((TempDataFromMemory[19]='0')or(TempDataFromMemory[19]=''))
          then
            DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Identifier_Parameters').Value:=null
            else
              DataModule1.ADOQuery1.Parameters.ParamByName('Date_Of_Issue_Identifier_Parameters').Value:=StrToDate(TempDataFromMemory[19]);
        if ((TempDataFromMemory[20]='0')or(TempDataFromMemory[20]=''))
          then
            DataModule1.ADOQuery1.Parameters.ParamByName('Valid_From_Parameters').Value:=null
            else
              DataModule1.ADOQuery1.Parameters.ParamByName('Valid_From_Parameters').Value:=StrToDate(TempDataFromMemory[20]);
        if ((TempDataFromMemory[21]='0')or(TempDataFromMemory[21]=''))
          then
            DataModule1.ADOQuery1.Parameters.ParamByName('Valid_To_Parameters').Value:=null
            else
              DataModule1.ADOQuery1.Parameters.ParamByName('Valid_To_Parameters').Value:=StrToDate(TempDataFromMemory[21]);
  try
    DataModule1.ADOQuery1.ExecSQL;
  except
    ShowMessage('Произошла ошибка при добавлении данных в Кey_User на данном этапе ключевой носитель с такими параметрами был только что добавлен но КИ добавить не поулучилось');
  end;
  {
  DataModule1.ADOQuery1.SQL.Text:='SELECT @@IDENTITY';
  DataModule1.ADOQuery1.Open;
  LastRecordingSession:=DataModule1.ADOQuery1.Fields[0].Value; //Получаю ID ТАБЛИЦЫ
  ShowMessage(inttostr(LastRecordingSession));
  DataModule1.ADOQuery1.Locate('Id_Tabele_of_Key_Media',LastRecordingSession,[])
  }
  end;{Самый конец}





Это сообщение отредактировал(а) ivanfr - 27.9.2012, 13:41
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1851 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.