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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2008, 17:00   #1
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию Пишет, мол мало параметров

обращаюсь к таблице NED_IM.DBF через ADOQuery:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.SQL.Text:='SELECT * FROM NED_IM WHERE IDDOC="    1"';
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end;
в таблие поле IDDOC строкового типа (((
конекшон стринг настроен.
жму Button1 пишет: [Miscrosoft] [Драйвет ODBC dBASE] Слишком мало параметров. Требуется 1.

Чего ему не хватает?
а вот без условия все работает
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.SQL.Text:='SELECT * FROM NED_IM';
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end;
В чем интересно дело?
azat вне форума Ответить с цитированием
Старый 17.01.2008, 17:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй так:
Код:
ADOQuery1.SQL.Text:='SELECT * FROM NED_IM WHERE IDDOC='+QuotedStr('1');
Ну и еще думаю что пробелы в твоем коде в кавычках могут мешать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2008, 18:08   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

По-моему, надо просто '...WHERE IDDOC=1';
Кавычки в данном конкретном случае не нужны, даже независимо от типа поля.

Последний раз редактировалось mihali4; 17.01.2008 в 18:11.
mihali4 вне форума Ответить с цитированием
Старый 18.01.2008, 09:22   #4
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию

Делаю:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.IndexName:='IDDOC';
ADOQuery1.SQL.Text:='SELECT * FROM VL_NED WHERE IDDOC=1';
ADOQuery1.ExecSQL;
ADOQuery1.Open;
end;
пишет мол Индекс не найдей (хотя в директории с таблицей VL_NED находтся соотвествующий файл индекса).
Может надо явно прописывать какой индекс использовать?
azat вне форума Ответить с цитированием
Старый 18.01.2008, 15:27   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Имя индекса никак не может совпадать с именем любого поля. Это то же самое, как пытаться сделать в таблице два поля с одинаковыми именами.
"Индекс не найден" означает только одно - вы его и не определяли...
Имя поля, которое вы указали (ADOQuery1.IndexName:='IDDOC') никак не может считаться индексом.
Для начала реструктурируйте таблицу и определите в ней индекс по этому полю.
mihali4 вне форума Ответить с цитированием
Старый 18.01.2008, 15:43   #6
azat
Пользователь
 
Регистрация: 26.11.2007
Сообщений: 56
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Имя индекса никак не может совпадать с именем любого поля. Это то же самое, как пытаться сделать в таблице два поля с одинаковыми именами.
"Индекс не найден" означает только одно - вы его и не определяли...
Имя поля, которое вы указали (ADOQuery1.IndexName:='IDDOC') никак не может считаться индексом.
Для начала реструктурируйте таблицу и определите в ней индекс по этому полю.
Дело в том, что я выполняю импорт из таблиц БД другой программы. Делать эту ножно программным способом, т.к. импортировать будут юзеры во врея выполнения программы.
azat вне форума Ответить с цитированием
Старый 18.01.2008, 16:15   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от azat Посмотреть сообщение
Дело в том, что я выполняю импорт из таблиц БД другой программы. Делать эту ножно программным способом, т.к. импортировать будут юзеры во врея выполнения программы.
Вы импортируете куда? В воздух? Нет, в таблицу. Вот у нее и должны быть определены индексы по нужным вам полям либо заранее, либо в процессе создания, если вы их создаете динамически.
mihali4 вне форума Ответить с цитированием
Старый 22.01.2008, 15:32   #8
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Код:
ADOQuery1.ExecSQL;   
ADOQuery1.Open;
по-моему "ADOQuery1.ExecSQL" здесь лишний, поскольку является аналогом Open для запросов, не возвращающих значений.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось crazy horse; 22.01.2008 в 15:34.
crazy horse вне форума Ответить с цитированием
Старый 22.01.2008, 15:58   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от crazy horse Посмотреть сообщение
по-моему "ADOQuery1.ExecSQL" здесь лишний, поскольку является аналогом Open для запросов, не возвращающих значений.
Весьма справедливо, не досмотрел.
Для сомневающихся - ADOQuery1.Open сначала выполняет ADOQuery1.ExecSQL, а потом выдает "наружу" полученный набор...
А о том, когда применять тот или иной способ, я уже устал повторять. Впечатление такое, будто все лепят свои вопросы, не просмотрев форум на предмет уже имеющегося ответа...
mihali4 вне форума Ответить с цитированием
Старый 22.01.2008, 16:27   #10
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

mihali4
Цитата:
А о том, когда применять тот или иной способ
update, delete - ExecSQL
select - просто open
dron-s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
1 человек пишет с 2 ников Tixis Свободное общение 3 10.04.2008 12:09
Мало мне плееров которые есть, вот свой решил замутить. Magog Qt и кроссплатформенное программирование С/С++ 0 16.03.2008 18:48
Теперь понятно почему мало пользуются поиском... Карась О форуме и сайтах клуба 9 03.03.2008 23:32
Тем кто пишет медиа плееры OrdJONY Свободное общение 14 06.10.2007 22:17