Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.09.2008, 18:01
LDV LDV вне форума
Прохожий
 
Регистрация: 03.05.2008
Сообщения: 14
Репутация: 10
По умолчанию Ошибка в простом SQL

Помогите найти ошибку.
не работает запрос. Нужно сделать поиск в базе по имени поля (FieldName) и его значению (FieldValue - может быть как числовое так и строковое). Как ни делаю все время выдает ошибку парсинга

PHP код:
function Tdatamodule_Connection.FindByField(const FieldName,
  
FieldValuestring): Integer;
begin
  Result 
:= -1;
  if 
ConnectionStatus csConnected then
  begin
    
// cmp_Query_.SQL.Text := Format('SELECT * FROM ITEM WHERE %s = %s', [FieldName, FieldValue]);
   
cmp_Query_.Close
   
cmp_Query_.SQL.Text := 'SELECT * FROM ITEM WHERE ' FieldName ' = :FieldValue';
    if 
not cmp_Query_.Prepared then
      cmp_Query_
.Prepare;
    
cmp_Query_.ParamByName('FieldValue').AsString := FieldValue;
    
cmp_Query_.ExecSQL;
    
Result := cmp_Query_.RowsAffected;
  
end;
  
FSelectedByKey := False;
end

Последний раз редактировалось LDV, 05.09.2008 в 18:15.
Ответить с цитированием
  #2  
Старый 05.09.2008, 18:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну да, после WHERE пробел поставь.
И close лучше ДО изменения запроса.
Ответить с цитированием
  #3  
Старый 05.09.2008, 18:14
LDV LDV вне форума
Прохожий
 
Регистрация: 03.05.2008
Сообщения: 14
Репутация: 10
По умолчанию

Изменил, все равно пишет parsing error. Может быть дело в БД. Пользуюсь DBISAM.
Ответить с цитированием
  #4  
Старый 05.09.2008, 18:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Попробуй так:

Код:
   cmp_Query_.Close;  
   cmp_Query_.SQL.Clear;
   cmp_Query_.SQL.Add('SELECT * FROM ITEM WHERE ' + FieldName + ' = :FieldValue'); 

и на какой строке останавливается? на препаре или на экзеке?
Ответить с цитированием
  #5  
Старый 05.09.2008, 18:30
LDV LDV вне форума
Прохожий
 
Регистрация: 03.05.2008
Сообщения: 14
Репутация: 10
По умолчанию

Запрос 100% правильный. Нужно грамотно сделать выборку. Типа:
PHP код:
function Tdatamodule_Connection.FindByField(const FieldName
  
FieldValuestring): Integer
begin 
  Result 
:= -1
  if 
ConnectionStatus csConnected then 
  begin 
    
// cmp_Query_.SQL.Text := Format('SELECT * FROM ITEM WHERE %s = %s', [FieldName, FieldValue]); 
   
cmp_Query_.Close;  
   
cmp_Query_.SQL.Text := 'SELECT * FROM ITEM WHERE ' FieldName ' = :FieldValue'
    if 
not cmp_Query_.Prepared then 
      cmp_Query_
.Prepare
   if 
что-то then // может быть проверять тип поля (числовой или текстовый, и как нибудь по другому)
     
cmp_Query_.ParamByName('FieldValue').AsInteger := StrToInt(FieldValue)
   else  
     
cmp_Query_.ParamByName('FieldValue').AsString := FieldValue
    
cmp_Query_.ExecSQL
    
Result := cmp_Query_.RowsAffected
  
end
  
FSelectedByKey := False
end
Ответить с цитированием
  #6  
Старый 09.09.2008, 15:37
vinni vinni вне форума
Начинающий
 
Регистрация: 26.01.2006
Сообщения: 135
Репутация: 10
По умолчанию

на какой строке и какая ошибка появляется?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:27.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025