Вопрос № 98712: Здравствуйте!
Подскажите что за фигня и как это поправить!!!
Пишу запрос напрямую к БД(Access) через сам Access находит одну запись(оно так и есть).
Копирую запрос в ADOQuery выполняю RecordCount=0.
..
Вопрос № 98.712
Здравствуйте!
Подскажите что за фигня и как это поправить!!!
Пишу запрос напрямую к БД(Access) через сам Access находит одну запись(оно так и есть).
Копирую запрос в ADOQuery выполняю RecordCount=0.
Приложение:
Отправлен: 17.08.2007, 10:41
Вопрос задал: chikanok (статус: 3-ий класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Sandy
Здравствуйте, chikanok!
Просто используются разные диалекты SQL (точно номера не помню - знатоки "АУ":)
В дэлфи используйте
select * from tab where (name like "1%") Order by name asc;
Почитать можно тут:
http://www.sql.ru/docs/sql/u_sql/ch5.shtml
Ответ отправил: Sandy (статус: 9-ый класс)
Ответ отправлен: 17.08.2007, 11:25
Отвечает: Виктор Пырлик
Здравствуйте, chikanok!
Дело в том, что препроцессор Access обрабатывает SQL команды несколько иначе, точнее, в Access есть много отличий, от стандартного SQL. В тоже время, вы передаёте на выполнение команду средствами ADO, где как раз работает стандартный SQL.
Для операции LIKE – фильтрация на основе маски, определены только следующие лексемы:
------------------------------------------------------------------------
% - любое количество, любых символов
_ - одиночный символ
[] – символы входящие в набор, ограниченный в [] (пример: LIKE NAME ‘[S-G]MIT’)
[^] – отрицание предыдущего набора, т.е., «символы не входящие в этот набор»
------------------------------------------------------------------------
Поэтому, ваш запрос должен выглядеть так:
select * from tab where (name like ‘1%’) Order by name asc;
или, непосредственно код Pascal:
procedure TForm1.Button1Click(Sender: TObject);
var s:String;
begin
{Функция Format очень удобна для формирования SQL запросов
а QuotedStr позволяет получить строку обрамленую одинарными ковычками
вместо "1%" можно использовать например Edit1.Text и т.д.}
s := Format('select * from cmd where (NAME_CMD LIKE %s )',[QuotedStr('1%')]);
ADOQuery1.Active := false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s);
ADOQuery1.Active := true;
Label1.Caption := IntToStr(ADOQuery1.RecordCount);// просто смотрим количество записей
Label2.Caption := s; // просто отображаем наш запрос
end;
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 17.08.2007, 12:13