Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно формировать запрос? [D7]


chir ©   (2005-01-12 00:50:00) 

Люди, помогите правильно сформировать запрос.

Сейчас использую такую технологию:

SQL.Text := 'UPDATE table SET f1='+IntToStr(var1)+' WHERE id='+id;

Ну вот так он у меня формируется, только он намного больше.

Вообще мне надо записать NULL если var1=0.

Пожалуйста, помогите правильно его сформировать. Понимаю, что можно сделать переменную типа String со значением 'NULL', проверять var1 и записывать уже либо var1 либо 'NULL' типа:

SQL.Text := 'UPDATE table SET f1=';
if var1=0 then
 SQL.Text := SQL.Text+'NULL'
else
 SQL.Text := SQL.Text+IntToStr(var1);
SQL.Text := SQL.Text+' WHERE id='+id;

Если сделать так, то (у меня много таких полей) получится очень громоздко. Наверняка есть способы лучше. Пожалуйста, помогите.


ЮЮ   (2005-01-28 05:49:00) [1]

P.S. Помимо Parameter.Value не мешает определить тип, т.к. из Null нничего не выяснить автоматом


ЮЮ   (2005-01-28 05:46:00) [2]

В запросе 2 параметра и второй ты не задал


chir   (2005-01-27 20:11:00) [3]

мастера. перешел я на параметры значит... но теперь никак не получается записать NULL-значения в базу. как бы сделать правильно?

пример:
 DM.ADOQ2.Close;
 DM.ADOQ2.SQL.Text := 'UPDATE employees SET '+
   ' inn=:prm_inn'+
   ' WHERE id_e=:id_e'

 if cxTE_inn.Text = '' then
   DM.ADOQ2.Parameters.ParamByName('prm_inn').Value := Null
 else
   DM.ADOQ2.Parameters.ParamByName('prm_inn').Value := cxTE_inn.Text;

 DM.ADOQ2.ExecSQL;

На такой код ошибка: Parameter object is improperly defined...

В ADOQе параметры не вносил. только этот код.


chir   (2005-01-12 18:50:00) [4]

спасибо всем. обязательно переведу все на параметры, как только разрешу новый вопрос... который видимо ставит под угрозу весь мой труд :(...

А с датами уже встретился, я их пока так записываю:
' date_of_birth='''+FormatDateTime('yyyy-mm-dd',cxDE_date_of_birth.Date)+''','+


Sergey13   (2005-01-12 13:47:00) [5]

2chir   (12.01.05 00:50)
Это конечно зависит от логики таблицы, но может лучше вместо NULL писать как раз 0?


Соловьев   (2005-01-12 13:45:00) [6]

да я вроде и так сделал что-то... будет время переведу на параметры... с ними наверное действительно удобнее будет.

Не удобнее, а правельнее! Когда будут даты - почувствуешь разницу!


DSKalugin   (2005-01-12 13:41:00) [7]

можно и без параметров обойтись таким макаром:

SQL.Clear;
SQL.Add('UPDATE table SET');
if var1=0
 then SQL.Add('f1=null')
 else SQL.Add('f1='+IntToStr(var1));
SQL.Add('WHERE id='+id);

только сдается мне что переменная id челочисленного типа и ее тоже надо к строке преобразовать чтобы было
SQL.Add('WHERE id='+IntToStr(id));


chir   (2005-01-12 02:13:00) [8]

про параметры знаю, спасибо...
просто не хотелось переходить на них...

да я вроде и так сделал что-то... будет время переведу на параметры... с ними наверное действительно удобнее будет.

фенкс


GanibalLector   (2005-01-12 01:47:00) [9]

>SQL.Text := 'UPDATE table SET f1='+IntToStr(var1)+' WHERE id='+id;

Что такое params знаешь?Если нет,то открой любую книгу.
SQL.Text := 'UPDATE table SET f1 :=f1 WHERE id :=id';


chir   (2005-01-12 01:23:00) [10]

Попробовал SQL.Text := SQL.Text+'bla-bla-bla' - не работает :(


Наверх

Титульная страница Поиск, карта сайта Написать письмо