Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2011, 13:40   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если tab_num символьного типа, то строку:
Код:
DataModule13.ADOQ_Sotrudnik.SQL.Add('FROM sotrudniki where tab_num=' +DBGrid1.DataSource.DataSet.fieldbyname('tab_num').asString);
нужно заменить на что-то типа (взять в кавычки):
Код:
DataModule13.ADOQ_Sotrudnik.SQL.Add('FROM sotrudniki where tab_num=''' +DBGrid1.DataSource.DataSet.fieldbyname('tab_num').asString+'''');
перед строкой
Код:
DataModule13.ADOQ_Sotrudnik.SQL.Add('SELECT * FROM sotrudniki');
не мешало бы вставить:
Код:
DataModule13.ADOQ_Sotrudnik.SQL.Clear;
Что касается моего первого собщения, то Insert в комбинации с Select не имеет перечня полей, просто в Select должно быть такое-же количество полей, как в таблице в которую идет вставка и типы которых позиционно соответствуют этой таблице (исключение - наличие аутоинкрементного поля в таблице, в которую идет вставка)
PS На какой строчке ошибку дает?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.01.2011 в 13:50.
Аватар вне форума Ответить с цитированием
Старый 15.01.2011, 13:52   #12
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Да запрос нормально составлен, таблицы криво, ну это другой вопрос,
я просто думаю что
DBGrid1.DataSource.DataSet = DataModule13.ADOQ_Sotrudnik
что и пытался выше сказать
vovk вне форума Ответить с цитированием
Старый 16.01.2011, 22:30   #13
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию

Как и прежде не работает
Ошибку даёт на строчке
DataModule13.ADOQ_Sotrudnik.SQL.Add ('FROM sotrudniki where tab_num=''' +DBGrid1.DataSource.DataSet.fieldby name('tab_num').asString+'''');
Я попробовал с другими полями fio и id
ничего не помогло

Последний раз редактировалось sasha198407; 16.01.2011 в 22:36.
sasha198407 вне форума Ответить с цитированием
Старый 16.01.2011, 22:36   #14
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

a
Код:
DBGrid1.DataSource.DataSet
вообще открыт? и это точно не
Код:
DataModule13.ADOQ_Sotrudnik
?
vovk вне форума Ответить с цитированием
Старый 16.01.2011, 22:50   #15
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
a
Код:
DBGrid1.DataSource.DataSet
вообще открыт? и это точно не
Код:
DataModule13.ADOQ_Sotrudnik
?
Не совсем понял что означает открыть, но в свойствах компонента DBGrid1 стоит DataSource.DataSet=ADOQ_Sotrudnik. Я так понимаю, что открыт. Ну собственно я пробовал и DBGrid1.DataSource.DataSet и DataModule13.ADOQ_Sotrudnik результат одинаковый
sasha198407 вне форума Ответить с цитированием
Старый 16.01.2011, 23:00   #16
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

О боже

в общем попробуйте так

Код:
procedure TSotrudnik.OtpuskClick(Sender: TObject);
var
s_:string;
begin

s_:=DBGrid1.DataSource.DataSet.fieldbyname('tab_num').asString ;  
 DataModule13.ADOQ_Sotrudnik.Close;

    DataModule13.ADOQ_Sotrudnik.SQL.Clear;

    DataModule13.ADOQ_Sotrudnik.SQL.Add('INSERT INTO otpusk (tab_num, fio, dolgnost, id_otd)');

    DataModule13.ADOQ_Sotrudnik.SQL.Add('SELECT tab_num, fio, dolg, id_otd');

    DataModule13.ADOQ_Sotrudnik.SQL.Add('FROM sotrudniki where tab_num=' +s_);

    DataModule13.ADOQ_Sotrudnik.ExecSQL;

    DataModule13.ADOQ_Sotrudnik.SQL.Add('SELECT * FROM sotrudniki');

    DataModule13.ADOQ_Sotrudnik.Active := true;

    DataModule13.ADOQ_Otpusk.SQL.Add('SELECT * FROM otpusk');

    DataModule13.ADOQ_Otpusk.Active := true;

end;

по поводу открыт, какие данные по вашему содержит
Код:
 DataModule13.ADOQ_Sotrudnik
после этого
Код:
DataModule13.ADOQ_Sotrudnik.Close;
действия?

Последний раз редактировалось vovk; 16.01.2011 в 23:08.
vovk вне форума Ответить с цитированием
Старый 16.01.2011, 23:19   #17
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию

Уай-уай!!! дорогой заработало. Только единственное добавил quotedstr в строчку
DataModule13.ADOQ_Sotrudnik.SQL.Add ('FROM sotrudniki where tab_num=' +quotedstr(s_)); И ещё он почему-то выделенную строку два раза копирует
sasha198407 вне форума Ответить с цитированием
Старый 16.01.2011, 23:37   #18
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от sasha198407 Посмотреть сообщение
Уай-уай!!! дорогой заработало. Только единственное добавил quotedstr в строчку
DataModule13.ADOQ_Sotrudnik.SQL.Add ('FROM sotrudniki where tab_num=' +quotedstr(s_));
я просто предпологал что tab_num числовое поле.

Цитата:
Сообщение от sasha198407 Посмотреть сообщение
У И ещё он почему-то выделенную строку два раза копирует
сколько записей условию соответствует столько и добавляет.
vovk вне форума Ответить с цитированием
Старый 17.01.2011, 00:44   #19
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию

Ну, всё всем спасибо. Тему можно закрывать.
sasha198407 вне форума Ответить с цитированием
Старый 17.01.2011, 09:18   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
И ещё он почему-то выделенную строку два раза копирует
DataModule13.ADOQ_Sotrudnik.SQL.Add ('FROM sotrudniki where tab_num=' +s_);
поробуй вывести здесь Showmessage( DataModule13.ADOQ_Sotrudnik.SQL.Tex t);
DataModule13.ADOQ_Sotrudnik.ExecSQL ;
DataModule13.ADOQ_Sotrudnik.SQL.Add ('SELECT * FROM sotrudniki');
поробуй вывести и вот здесь Showmessage( DataModule13.ADOQ_Sotrudnik.SQL.Tex t);
и потом сравни их.

Мы все добавляем (Add) но не чистим. Для простых (коротких) запросов надежнее писать так.
DataModule13.ADOQ_Sotrudnik.SQL.Text:='SELECT * FROM sotrudniki';
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 17.01.2011 в 09:24.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) Schutze Помощь студентам 6 29.11.2009 22:15
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
sql или не sql Diamand SQL, базы данных 9 18.09.2008 17:17
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15