Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизОбнулениеячейки в пародоксовской табличке. Найти похожие ветки
← →
Елена (2005-05-13 07:21) [0]Доброго времени суток. Подскажите, пожалуйста, как можно полностью обнулить ячейку (поле) типа Currency в таблице Paradox. Работая с Interbase это делала так:
DM.IBQuery2.Close;
DM.IBQuery2.SQL.Clear;
DM.IBQuery2.SQL.Add("UPDATE SOOTVET SET REZ_NACH = :p2 where ACCOUNT = :p1");
DM.IBQuery2.ParamByName("p1").Value:=DM.IBTable1.fieldbyname("ACCOUNT").AsString;
DM.IBQuery2.ParamByName("p2").Value:=null;
DM.IBQuery2.Open;
В Парадоксе так не проходит, nil тоже не "кушает", также как и "||", "", strtofloat"".
← →
evvcom © (2005-05-13 08:19) [1]DM.IBQuery2.ParamByName("p2").Clear;
← →
sniknik © (2005-05-13 08:23) [2]а так
DM.IBQuery2.SQL.Add("UPDATE SOOTVET SET REZ_NACH = null where ACCOUNT = :p1");
(может в local sql null тоже есть)
← →
Елена (2005-05-13 08:38) [3]Люди, обратите внимание, пожалуйста, что с IBQuery2 я выложила рабочий код для interbase, для Paradox такое не идет, он null не знает, т.е. вот такое уже не работает:
DM.Query1.SQL.Clear;
DM.Query1.SQL.Add("update obraz set Ob_deb=:p1 where Ob_deb=0");
DM.Query1.ParamByName("p1").Value:=null;
DM.Query1.Open;
← →
sniknik © (2005-05-13 08:48) [4]Елена обрати внимание, local sql это BDE, а BDE это Paradox как бы это пародоксально не было. ;)
ктати, у тебя запрос не возврашает данных, т.е. null на который ты "ополчилась" и начала писать кашает его или не кушает (вместо приведения выдаваемой ошибки) может быть сдесь совсем не причем.
← →
evvcom © (2005-05-13 08:51) [5]Стоп! А почему Open? В запросе же UPDATE! Execute здесь нужен. И поточнее, пожалуйста, насчет ошибки: где и что пишет?
← →
Елена (2005-05-13 09:02) [6]evvcom © - Это не красиво, но не критично, сейчас исправила на DM.Query1.ExecSQL; такой же результат.
sniknik © не очень поняла смысл написанного...
Можно я повторю вопрос: Как поле currency в парадоксовской таблице сделать пустым?
← →
evvcom © (2005-05-13 09:05) [7]
> Это не красиво
Что некрасиво? Не понял...
И про ошибку так ничего не пояснила. Текст ошибки и строка в которой она "вылезает"?
← →
Елена (2005-05-13 09:07) [8]Ошибка, он не понимает что такое null
← →
Anatoly Podgoretsky © (2005-05-13 09:08) [9]evvcom © (13.05.05 08:51) [5]
Какой Execute нет у Tquery такого метода.
Елена (13.05.05 08:38) [3]
Надо переписать код такDM.Query1.Close;
DM.Query1.SQL.Text := "update obraz set Ob_deb=:p1 where Ob_deb=0");
DM.Query1.ParamByName("p1").Clear; // может и лишнее, вроде бы и так уже NULL
DM.Query1.ExecSql;
Насчет NULL в справке нет ни слова про него, может для Парадокс это и не возможно.
← →
Елена (2005-05-13 09:19) [10]Anatoly Podgoretsky ©
не работает, выдает ошибку: "Для Query1 поле р1 является неизвестним типом". Простите за корявый перевод, но смысл понятен.
← →
evvcom © (2005-05-13 09:26) [11]
> Какой Execute нет у Tquery такого метода.
Писал навскидку. Нашла ведь Елена ExecSQL.
> Для Query1 поле р1 является неизвестним типом
Значит надо определить тип параметра, до null еще дело не дошло.
← →
Anatoly Podgoretsky © (2005-05-13 09:38) [12]Понятен, это означает, что у тебя не создался параметр.
Можно попробовать так, перед DM.Query1.ParamByName вставить
Можно попробовать так, перед DM.Query1.Paramы.ParseSQL(DM.Query1.SQL.Text, TRUE): String;
или создать параметр вручную, задав все значения полей, еще можно создать параметр прямо в компоненте во design time и там определить все характеристики.
Также обратить внимание на ParamCheck
← →
Leshiy © (2005-05-13 09:38) [13]Так проходит:
DM.Query1.Close;
DM.Query1.SQL.Text := "update obraz set Ob_deb=null where Ob_deb=0");
DM.Query1.ExecSql;
Но, если кто знает как через параметр передать - скажите (мне тоже нужно).
← →
Елена (2005-05-13 09:55) [14]Anatoly Podgoretsky © а можно глупый вопрос задать?
>или создать параметр вручную, задав все значения полей, еще можно создать параметр прямо в компоненте во design time и там определить все характеристики.
А какие характеристики у null? :-)
← →
Sergey13 © (2005-05-13 10:01) [15]2[14] Елена (13.05.05 09:55)
А почему хочется имеено NULL а не 0? Где то есть проверка на Is Null? И она работает?
← →
evvcom © (2005-05-13 10:15) [16]
> А какие характеристики у null?
У null одна характеристика - "нет значения", но у поля и параметра есть характеристика "тип" и для некоторых типов также важен "размер". А уже в Field.Value или Param.Value записывается null или 0, "" и прочее в зависимости от типа.
← →
Anatoly Podgoretsky © (2005-05-13 10:21) [17]Ну я не использую Парадокс и в последних проектах не использую БДЕ. В АДО немного другие параметры, там есть свойство TParameterAttribute, которому можно присвоить значение psNullable, у БДЕ этого нет.
Сообщение [13] пробовала? Если оно не работает то можно не мучиться, а для Currency в Парадоксе вообще возможно значение NULL или нет. Парадокс не зря парадоксом назвали. Я на него уже лет 15 удивляюсь.
← →
Елена (2005-05-13 10:22) [18]evvcom ©, Sergey13 © если пишешь null запрос не работает, а 0 мне не надо, пожелание пользователя, чтобы нули в табличке не отображались.
← →
stone © (2005-05-13 10:26) [19]
> Елена (13.05.05 10:22) [18]
> evvcom ©, Sergey13 © если пишешь null запрос не работает,
> а 0 мне не надо, пожелание пользователя, чтобы нули в табличке
> не отображались.
Чтобы нули не отображались в гриде? Я правильно понимаю? Ну так это можно решить и на клиенте, например через OnGetText
← →
Елена (2005-05-13 10:32) [20]stone © меня немного не устраивает данные вариант, так как данные таблицы потом распечатываются...
← →
Anatoly Podgoretsky © (2005-05-13 10:35) [21]Елена (13.05.05 10:22) [18]
Тогда это совсем другая проблема, это проблема отображения используй OnGetText как сказали. Присваивать числовым полям пустые значения это специально расставлять грабли по пути следования. Следует поступить как раз наоборот все пустые значения преобразовать в 0 и больше никогда так не делать.
Волосы будут прямые и шелковистые.
← →
Sergey13 © (2005-05-13 10:36) [22]2[20] Елена (13.05.05 10:32)
Ну и что? Какая разница?
← →
Anatoly Podgoretsky © (2005-05-13 10:49) [23]Елена (13.05.05 10:32) [20]
Они и при расчатке такие же будут, если будет использоваться тот же набор данных, это работает на уровне поля, а не грида или подобного.
← →
evvcom © (2005-05-13 10:56) [24]Елена. Что-то Вы нам вешаете на слуховые аппараты (или смотровые). Только что создал тестовое приложение. Таблица Paradox 5.0 for Windows. Поле aa типа $(Money), bb - Number.
В Delphi TQuery.SQL: "update "aa.DB" set Aa=:p1 where bb=:p2"
параметры p1.DataType=ftCurrency, p1.ParamType=ptInput, p2.DataType=ftInteger, p2.ParamType=ptInput
Далее
Query1.ParamByName("p1").Clear; // это как говорил Анатолий вобщем-то лишнее, если раньше нигде не присваивалось иное
Query1.ParamByName("p2").AsInteger := 1;
Query1.ExecSQL;
Проверил, все работает на УРА!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.051 c