Форум: "Начинающим";
Текущий архив: 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