Форум: "Базы";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
ВнизПомогите пожалуйста! Найти похожие ветки
← →
DeNNiss (2002-01-17 08:08) [0]Имеется такой запрос:
with DM.Query5 do begin
SQL.Clear;
Close;
SQL.Add("SELECT * FROM DATA WHERE LPUMG = :LPUMG AND DATA = :DATA AND KABEL = :KABEL")
ParamByName("LPUMG").Value := DM.tbData.FieldByName("lpumg").AsString;
ParamByName("DATA").Value := DM.tbData.FieldByName("Data").AsDateTime;
ParamByName("KABEL").Value := DM.tbData.FieldByName("NumKabel").AsInteger;
Open;
end;
Но, ругается на последний параметр:ParamByName("KABEL").Value := DM.tbData.FieldByNamе("NumKabel").AsInteger;
, пишет "Несоответствие типов данных в условии отбора"... Без этого параметра все работает зыко. В чем проблема, подскажите?
← →
Turalyon (2002-01-17 08:32) [1]Попробуй поставить
ParamByName("KABEL").AsInteger = DM.tbData.FieldByName("NumKabel").AsInteger;
Либо вообще повыкидывай все эти параметры и делай строками, как я писал тебе в одном из примеров ниже.
← →
roottim (2002-01-17 08:39) [2]в пр-пе должно работать!
советую посмотреть его через скажем ShowMessage... все ли правильно в синтаксисе... и соответствии типу поля
← →
DeNNiss (2002-01-17 08:47) [3]> Turalyon, спасибо большое за помощь, но я пробовал твой код, там видимо действительно проблема в кавычках, не получилось, в книге нашел нужный пример, все вроде заработало, но возникла вот новая проблема.
← →
Turalyon (2002-01-17 09:14) [4]>DeNNiss
Попробуй вот так
SQL.Add("SELECT * FROM DATA")
SQL.Add("where LPUMG = "" + DM.tbData.FieldByName("lpumg").AsString + """);
SQL.Add("and KABEL = " + DM.tbData.FieldByName("NumKabel").AsString);
SQL.Add("and DATA = "" + DM.tbData.FieldByName("Data").AsString + """);
Или если не будет работать
То попробуй поменять последнюю строку на такую
SQL.Add("and DATA = "" + DateToStr(DM.tbData.FieldByName("Data").AsDateTime) + """);
Да и еще не очень хорошо выглядят названия полей, особенно data (ИМХО), можно напороться на зарезервированные слова и будешь потом долго думать почему не работает.
← →
Turalyon (2002-01-17 09:15) [5]Да не очень внятно получилось в хвостах... там написана двойная кавычка в одинарных " " "
← →
Desdechado (2002-01-17 10:03) [6]не используй
ParamByName("KABEL").Value
это приводит к вариантному преобразованию, что в итоге будет - только дельфи знает. Используй явное AsInteger, AsDateTime и т.д.
← →
DeNNiss (2002-01-17 11:34) [7]Нет, никак не получается, уперлось Дельфи и ни в какую :(( По разному пробовал - нифига, таже ошибка, хоть тресни....
← →
Wind (2002-01-17 12:01) [8]Во-первых, если ты пишешь запрос для большой БД, то не советую использовать конкатенацию строк - работает намного дольше, чем через ParamByName
Во-вторых, не используй ParamByName.Value - лучше укажи явное преобразование типов.
Ну и последнее - по возможности откажись от БДЕ, если работаешь через нее например с Ораклом.
← →
Turalyon (2002-01-17 12:49) [9]>Wind
Во-первых, если ты пишешь запрос для большой БД, то не советую использовать конкатенацию строк - работает намного дольше, чем через ParamByName
Не знал такого... А почему?
>DeNNiss
Скажи какой у тебя тип поля numKabel и тип поля KABEL???
← →
plis (2002-01-17 20:46) [10]лучший вариант
установи DataSource к набору DM.tbData
DM.Query5.Datasuorce сошли на DataSource
и тогда не надо уже присваивать параметры
with DM.Query5 do begin
SQL.Clear;
Close;
SQL.Add("SELECT * FROM DATA WHERE LPUMG = :LPUMG AND DATA = :DATA AND KABEL = :KABEL")
Open;
end;
← →
Dok_3D (2002-01-18 07:02) [11]>DeNNiss
Но, ругается на последний параметр: ParamByName("KABEL").Value := DM.tbData.FieldByNamе("NumKabel").AsInteger;, пишет "Несоответствие типов данных в условии отбора"...
Ставь принудительно для каждого параметра конструкцию типа -
ParamByName("KABEL").DataType:=ftInteger;
← →
Леван (2002-01-21 08:36) [12]А какого типа kabel from DATA? numeric or decimal и величина передаваемого фактического параметра?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c