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

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

Передать в Format дату [D7, XP]


Страницы:   1 2 3 4

Laguna ©   (2011-10-18 15:25:00) 

При форматировании строки на ряду с числами и строками присутствует параметр как дата. Как его передать через Format? Из перечисленного в справке ничего не нашел

d = Десятичное (целое число)
e = Научный
f = Установленный
g = Генерал
m = Деньги
n = Число (плавающее)
p = Указатель
s = Строка
u = Десятичное число без знака
x = Шестнадцатеричный


А нужно вот так ... Format('%d - %s - %дата'), [10, 'Строка', Now]


OW   (2011-10-18 16:54:00) [61]


> не надо общую процедуру делать. Незачем.

да можно,
для упрощения, например

OpenQ(oqTmp, 'select * from ТАБЛА1 where ID_COL = :ID_COL ', [AVal]);
FMyVar1 := oqTmp.FieldbyName('COL_NAME').Value;
OpenQ(oqTmp, 'select * from ТАБЛА22 where ID_COL = :ID_COL and ID_COL2 = :ID_COL2 ', [AVal2, AVal3]);
FMyVar2 := oqTmp.FieldbyName('COL_SUBSCRIBE').Value;

вместо

oqTmp.sql.test := 'select * from ТАБЛА1 where ID_COL = :ID_COL ';
oqTmp.pameters.parambyname(). value := AVal;
oqTmp.Open;
FMyVar1 := oqTmp.FieldbyName('COL_NAME').Value;
oqTmp.sql.test := 'select * from ТАБЛА22 where ID_COL = :ID_COL and ID_COL2 = :ID_COL2 ';
oqTmp.pameters.parambyname(). value := AVal2;
oqTmp.pameters.parambyname(). value := AVal3;
oqTmp.Open;
FMyVar2 := oqTmp.FieldbyName('COL_SUBSCRIBE').Value;

представляется вот это все
oqTmp.pameters.parambyname(). value := AVal2;
oqTmp.pameters.parambyname(). value := AVal3;
да и Open|Exec потом - шелуха, детали, отвлекающие от сути

запрос и сразу параметры - имхо, лучше.


Ega23   (2011-10-18 16:34:00) [62]


> Только как это будет выглядеть с применением их в общей
> процедуре?


А не надо общую процедуру делать. Незачем.


Laguna   (2011-10-18 16:32:00) [63]

Я понял насчет параметров, как единичный случай сейчас попробую. Только как это будет выглядеть с применением их в общей процедуре? Параметры я указываю после строки запроса. А ведь их(параметров) каждый раз может быть различное количество. В данной ситуации Format ведь тоже использует параметры и все в одной строке.


OW   (2011-10-18 16:31:00) [64]

кажется, уловил мысль
вот, не претендуя на изящество и опуская проверки

procedure OpenQ(const Q:TORA(или ADO)Query; const SQL:string; const P:array of variant);
var
 i:integer;
 s:string;
begin
 try
 try
   Screen.Cursor := crHourGlass;
   if SQL <> '' then
        Q.SQL.Text := SQL;
   s := '';
   for i := 0 to Q.ParamCount-1 do
   begin
     case Q.Params[i].DataType of
       ftDateTime: Q.Params[i].AsDateTime := P[i];
       else Q.Params[i].Value := P[i];
     end;
     s := s + Q.Params[i].Name + '=' + Q.Params[i].AsString + #13#10;
   end;
   Q.Open;
 except
   on E:Exception do
   begin
     Screen.Cursor := crDefault;
     E.Message := E.Message + #13#10 + 'досада в uUtils. procedure OpenQ. при попытке сделать ' + #13#10 + Q.SQL.Text + #13#10 + ' а параметры таковы:' + s;
     Raise;
   end;
 end;
 Screen.Cursor := crDefault;
end;

 OpenQ(oqTmp, 'select * from AGENTS where ID_AGENT = :ID_AGENT ', [IdAgent]);
 FAgentId := oqTmp.FieldbyName('ID_AGENT').Value;


OW   (2011-10-18 16:21:00) [65]

uses the parameters
verwendet die Parameter
utilise les paramètres
パラメータを使用して います


Ega23   (2011-10-18 16:20:00) [66]

Ты не используешь параметры.
Используй их и будет тебе щщасте.


Laguna   (2011-10-18 16:06:00) [67]

Общая процедура для исполнения SQL-запроса

procedure SqlFromTab(St : String);
begin
 with TADOQuery.Create(nil) do
  try
    ADOConnection := DM1.AdoConnection1;
    ParamCheck := True;
    SQL.Clear;
    SQL.Add(St);
    ExecSQL;
  finally
    Free;
  end;
end;


Далее формируем нужную строку для запроса


SQlFromTab(Format('Insert InTo OperTab (Kod, , DataDoc, NameDoc, SumDoc) ' +
                               'Values (%d, ???, %s, %.0f)',[RegInf.Kod, DataDocDateEdit.Date, NameDocEdit.Text, DBGridEh1.Columns[4].Footer.SumValue]));


Кстати вырисовалась дополнительно еще одна загвоздка. DBGridEh1.Columns[4].Footer.SumValueИмеет тип Variant и при применении параметра %.0fТоже выдает ошибку несовместимости типа параметра, хотя в таблице поле имеет тип Double.


Ega23   (2011-10-18 16:04:00) [68]


> нужно будет в таблицу с полем TDate через sql-запрос,


Параметры используй.


OW   (2011-10-18 16:01:00) [69]


> передать дату нужно будет в таблицу с полем TDate через
> sql-запрос

use parameters


Amoeba_   (2011-10-18 15:48:00) [70]


> передать дату нужно будет в таблицу с полем TDate через
> sql-запрос

Запрос в студию!


Laguna   (2011-10-18 15:41:00) [71]

Дело в том, что передать дату нужно будет в таблицу с полем TDate через sql-запрос, поэтому перевод даты в строку не пойдет.


Ega23   (2011-10-18 15:31:00) [72]

Format('%d - %s - %s'), [10, 'Строка', DateTimeToStr(Now)]

Ну или вместо DateTimeToStr можно FormatDateTime


Amoeba_   (2011-10-18 15:30:00) [73]

Format('%d - %s - %s'), [10, 'Строка', DateToStr(Now)]


Страницы:   1 2 3 4

Наверх

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