powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Не могу понять, что влияет на ошибку
8 сообщений из 8, страница 1 из 1
Не могу понять, что влияет на ошибку
    #39744218
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Может кто-нибудь подскажет где кроется решение проблемы!
В БД 2 таблицы - мастер - Remont и детейл - Dannie_Komissia_Remont (список комиссии ФИО и должность), в делфи (Сиэтл) использую компоненты ADO, соединены по первичному ключу ID_Remont основной таблицы. В Делфи хочу, чтобы в детейл добавлялись поля из не связанной таблицы Sotrydnik (список персонала ФИО и должность). Вешаю на нажатие кнопки такой код:
Код: pascal
1.
2.
3.
4.
5.
6.
if(ADOQuery19.Active)
then ADOQuery19.Close;
ADOQuery19.SQL.Add('INSERT INTO Dannie_Komissia_Remont (ID_Remont, FIO, Dolznost) SELECT ID_Remont='''+ADODataSet1.FieldByName('ID_Remont').AsString+''', FIO, PDKK FROM Sotrydnik WHERE PDKK IN (''Заместитель председателя комиссии'',''Член комиссии'') ORDER BY PDKK,FIO DESC');
ADOQuery19.ExecSQL;
ADOTable1.Close;
ADOTable1.Open;


Работает не корректно - в первый раз когда создаешь новую запись всё нормально, в связанную таблицу заносятся записи (4шт.) с нужным ID и потом на форме всё отображается. Когда во вторую новую запись вставляю комиссию - в БД уже заносятся записи с текущим и предыдущим ID (8шт.) и так далее, все предыдущие записи обрабатываются, что ,естественно, не правильно - должны записываться только с текущим ID, на котором стоит курсор!

Уже дня три понять не могу в чём проблема. Есть какие идеи в чем кроется проблема? В настройках компонент ADO или в базе что-то надо подкрутить? А может я опять всё не правильно сделал?
Заранее спасибо сочуствующим ))
...
Рейтинг: 0 / 0
Не могу понять, что влияет на ошибку
    #39744231
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA,

какие еще ID? Вы выбираете все строки по условию ''Заместитель председателя комиссии'',''Член комиссии''. Добавьте в выражение фильтра WHERE and not exists (select ...), если не хотите выбирать существующие.
...
Рейтинг: 0 / 0
Не могу понять, что влияет на ошибку
    #39744237
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA должны записываться только с текущим ID, на котором стоит курсор!

так вы скажите об этом серверу базы данных.
с помощью волшебного слова WHERE
...
Рейтинг: 0 / 0
Не могу понять, что влияет на ошибку
    #39744295
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA,
Немного офф, для передачи значений в запрос используйте параметры. Собирать так запрос-дурной тон.
...
Рейтинг: 0 / 0
Не могу понять, что влияет на ошибку
    #39745098
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы!
В менеджере SQL запрос выполняется правильно, в таблицу при указании конкретного ID_Remont в Dannie_Komissia_Remont добавляется необходимые 4 записи.
Владислав КолосовFOGOT-BAstA,
Я же их из Sotrydnik выбираю, там 4 записи таких! Можно EXISTS, а можно IN, который я и использую...
какие еще ID? Вы выбираете все строки по условию ''Заместитель председателя комиссии'',''Член комиссии''. Добавьте в выражение фильтра WHERE and not exists (select ...), если не хотите выбирать существующие.
StarikNavy,
Код: sql
1.
ID_Remont='''+ADODataSet1.FieldByName('ID_Remont').AsString+'''


Вот тут я ведь указываю конкретный текущий ID из Датасета, который надо внести в те 4 строки, которые выбираются из Sotrydnik. Как-то по другому сделать можно средствами SQL?
Странно, что при внесении записей из Delphi добавляет вновь созданные в сессии ID_Remont в выборку
iiyama,
С параметрами постоянный гемор, надо их определять правильно...дольше возиться, уж привык напрямую писать
...
Рейтинг: 0 / 0
Не могу понять, что влияет на ошибку
    #39745179
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstAС параметрами постоянный гемор, надо их определять правильно...дольше возиться, уж привык напрямую писать
Really? А потом кто-нибудь из вредности заведет тебе в поле ID_remont значение
Код: sql
1.
', '', ''; DROP TABLE Dennie_Komissia_Remont; SELECT 1' 


и будешь ты по-старинке на форуме вопрошать "доколе?!"
...
Рейтинг: 0 / 0
Не могу понять, что влияет на ошибку
    #39745256
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOGOT-BAstA,

выбирайте по cdjtve фильтру, но исключите те ID которые уже перенесены, я об этом писал. Исключить можно использую not exists().
...
Рейтинг: 0 / 0
Не могу понять, что влияет на ошибку
    #39747130
FOGOT-BAstA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович,
Успокойтесь, таких вопросов от меня пока не было и не будет. Тем более ID напрямую беру из DataSet'а, параметр тоже его брать будет оттуда же, так какая разница? Поле инкрементное, ключевое, числовое, пользователь его не видит и оно защищено от редактирования. Свои теоретические домыслы оставьте при себе. А если пользователь сможет в приложении каким-то образом написать SQL код с такими записями, то это уже не вопрос передачи параметров...
Владислав Колосов,
Спасибо, теперь вроде стало более понятно, что Вы имели ввиду. Но в таком случае думаю надо дописывать большой алгоритм считывания всех предыдущих ID, которые были введены в сессии.
Я всё-таки грешил на компонент ADOQuery, в обработчике кнопки написал вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
if(ADOQuery19.Active)
then ADOQuery19.Close;
ADOQuery19.SQL.Add('INSERT INTO Dannie_Komissia_Remont (ID_Remont, FIO, Dolznost) SELECT ID_Remont='''+ADODataSet1.FieldByName('ID_Remont').AsString+''', FIO, PDKK FROM Sotrydnik WHERE PDKK IN (''Заместитель председателя комиссии'',''Член комиссии'') ORDER BY PDKK,FIO DESC');
ADOQuery19.ExecSQL;
ADOQuery19.SQL.Clear;
ADOQuery19.Close;
ADOTable1.Close;
ADOTable1.Open;


и всё стало вводиться корректно...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Не могу понять, что влияет на ошибку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]