Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
15-1219226478
silver222
2008-08-20 14:01
2008.10.12
Вывод фотографий


2-1220869518
koha!
2008-09-08 14:25
2008.10.12
пару вопросов по отладке приложений


3-1207245676
kotyara12
2008-04-03 22:01
2008.10.12
Рекурсивная выборка из таблицы со структурой дерева


15-1216776408
Граф3
2008-07-23 05:26
2008.10.12
Можно ли в html нарисовать график?


2-1220237788
FIL-23
2008-09-01 06:56
2008.10.12
Сортировка масива





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский