Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Поиск   Найти похожие ветки 

 
Nameziz   (2008-09-08 12:14) [0]

Помогите с реализацией поиска. Задача: написать функцию которая бы по имени поля и его значению искала записи (использовать компонент Query + использовать параметры) и в качестве результата возвращала количество найденных записей. Вот что у меня получилось:

function Tdatamodule_Connection.FindByField(const FieldName,
 FieldValue: string): Integer;
begin
 Result := -1;
 if ConnectionStatus = csConnected then
 begin
   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").AsInteger := StrToInt(FieldValue);
 {  else
     cmp_Query_.ParamByName("FieldValue").AsString := FieldValue; }
   cmp_Query_.ExecSQL;
   Result := cmp_Query_.RowsAffected;
 end;
 FSelByKey := False;
end;



 
Юрий Зотов ©   (2008-09-08 12:16) [1]

SELECT COUNT(*) FROM ITEM WHERE " + FieldName + " = :FieldValue";

И больше ничего не надо.


 
Palladin ©   (2008-09-08 12:16) [2]

не будь таким сложным
cmp_Query_.ParamByName("FieldValue").Value:=FieldValue;


 
clickmaker ©   (2008-09-08 12:18) [3]

> не получается сделать разделение для тестовых и числовых
> полей.

FieldValue: Variant


 
Nameziz   (2008-09-08 12:28) [4]


 cmp_Query_.ParamByName("FieldValue").Value:=FieldValue;

Все равно выдается ошибка parsing error и перечисляется список типов, может дело в самом синтаксисе SQL. Пользуюсь DBISAM.


 
Palladin ©   (2008-09-08 12:34) [5]

а кто именно ошибку выдает?


 
Nameziz   (2008-09-08 12:36) [6]

ExecSQL


 
Palladin ©   (2008-09-08 12:38) [7]

может имя поля неверно задано?


 
Ega23 ©   (2008-09-08 12:38) [8]


> ExecSQL


читай разницу TQuery.ExecSQL и TQuery.Open


 
Palladin ©   (2008-09-08 12:39) [9]

стоп! какой ExecSQL? чего творишь то :)
у тебя запрос на выборку, Open надо делать.


 
Nameziz   (2008-09-08 13:21) [10]

И с Open то же самое


 
turbouser ©   (2008-09-08 13:25) [11]

А чему равно FieldValue ?


 
Nameziz   (2008-09-08 13:30) [12]

FieldValue задается вручную. Может быть текстовое значение либо числовое.


 
Palladin ©   (2008-09-08 13:33) [13]

Function GetCount(Const fn:String; Const fv:Variant):Integer;
Var
 q:TADOQuery;
Begin
 q:=TADOQuery.Create(Nil);
 Try
  q.ConnectionString:=<строка подключения>; или q.Connection:=<объект соединения>;
  q.sql.text:="select count(*) from ITEM where "+fn+"=:PFV";
  q.Parameters.ParamByName("PFV").value:=fv;
  q.Open;
  Result:=q.Fields[0].AsInteger;
  q.Close;
 Finally
  q.Free;
 End;
End;


 
Sergey13 ©   (2008-09-08 13:33) [14]

> [0] Nameziz   (08.09.08 12:14)
> + использовать параметры

В данном случае они будут бесполезны и только мешать.


 
Юрий Зотов ©   (2008-09-08 14:23) [15]

> Palladin ©   (08.09.08 13:33) [13]

А я нашел плюшку, а я нашел плюшку, а я буквоед, а я буквоед, Close можно не писать, Close можно не писать...

:o)


 
Palladin ©   (2008-09-08 14:30) [16]

ну можно конечно :) но мы, хорошие дисциплинированные кодеры, всегда пишем, даже в таких ситуациях, а то малоли... :) потом искать бродить по коду не хотим :)


 
jack128_   (2008-09-08 14:55) [17]


> но мы, хорошие дисциплинированные кодеры, всегда пишем,
> даже в таких ситуациях, а то малоли... :)

кстати зря.  Другой человек посмотрит и подумает, что Close нужно обязательно явно писать. и потому будет громоздить его куда попало.


 
clickmaker ©   (2008-09-08 14:56) [18]

Close надо писать перед Open
а то мало ли...


 
Германн ©   (2008-09-08 15:04) [19]


> Close надо писать перед Open

Сразу после Create! А то мало ли...


 
Palladin ©   (2008-09-08 15:06) [20]


> Другой человек посмотрит и подумает, что Close нужно обязательно
> явно писать.

И правильно сделает если примет за непреложную истину. Взял - отдай. Позже набравшись опыта узнает, что можно и неможно, но писать не перестанет, бо дисциплинирован. И тоже правильно сделает.


 
Anatoly Podgoretsky ©   (2008-09-08 15:08) [21]

И с проверкой if Active then close



Страницы: 1 вся ветка

Текущий архив: 2008.10.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
3-1207245676
kotyara12
2008-04-03 22:01
2008.10.12
Рекурсивная выборка из таблицы со структурой дерева


15-1219404029
cyborg
2008-08-22 15:20
2008.10.12
TDataGrid


2-1220521599
kami
2008-09-04 13:46
2008.10.12
Помогите с помехоустойчивым кодированием


15-1219232749
oldman
2008-08-20 15:45
2008.10.12
Ой, как дурят нашего брата...


1-1200387243
Sour Smile
2008-01-15 11:54
2008.10.12
Перезапустить програмно COM+ сервер