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]


Германн   (2011-10-19 01:20:00) [41]


> Laguna ©   (18.10.11 23:56) [31]
>
> Допустим Clear я делаю всегда перед подстановкой новой строки
> запроса. Другое дело , что "настроку параметров" я выполняю
> не в том месте,

???
Очень похоже на "револьвер". И на "русскую рулетку". :)


Laguna   (2011-10-19 00:37:00) [42]

НУ, как я и предполагал, неверно было расположено место присвоения значений параметрам. После внесения изменений все заработало ка нужно. Вот конечный вариант многовариантной процедуры :

procedure OperFromBuhTab(St : String; const P : array of variant);
Var
 i : Integer;
begin
 with TADOQuery.Create(nil) do
  try
    ADOConnection := DM1.AdoConnection1;
    ParamCheck := True;
    SQL.Clear;
    SQL.Add(St);
    for i := 0 to High(P) do
     Params[i].Value := P[i];
    ExecSQL;
  finally
    Free;
  end;
end;


Преимущества использования этой процедуры:
1) Query коспонент формируется в рантайм по мере необходимости
2) Произвольное количество входящих параметров

OW- спасибо за const P : array of variant
Ega23- спасибо за Товарищ SQL.Clear делает, а потом удивляется.Хоть не совсем то, но навело на мысль обратить внимание на место расположения строки запроса и параметров.


Laguna   (2011-10-18 23:56:00) [43]

Допустим Clear я делаю всегда перед подстановкой новой строки запроса. Другое дело , что "настроку параметров" я выполняю не в том месте,

 SQL.Clear;
 for i := 0 to High(P) do
   Params[i].Value := P[i];
 SQL.Add(St);
 ExecSQL;

А нужно правильно так, ИМХО

 SQL.Clear;
 SQL.Add(St);
 for i := 0 to High(P) do
   Params[i].Value := P[i];
 ExecSQL;


по крайней мере  когда подставлю реальные параметрвы типа
парам = значение
парам = значение
парам = значение


Ega23   (2011-10-18 21:45:00) [44]


> Какой из двух?


Да не из двух. Товарищ SQL.Clear делает, а потом удивляется.


Плохиш   (2011-10-18 21:29:00) [45]


> Laguna ©   (18.10.11 21:02) [27]

> точка останова for i := 0 to High(P) do - массив содержит
> 4 элемента

Какой из двух?


Игорь Шевченко   (2011-10-18 21:25:00) [46]


> http://www.delphibasics.ru/Format.php


Внушает.

"Ôóíêöèÿ Format îáåñïå÷èâàạ̊ 'C' ïîäîáíîå ôîđ́ạ̀èđîâàíè&# 229; ́íîæåṇ̃âà ïđîṇ̃ûơ ̣èïîâ äàííûơ â ṇ̃đîêå. Îíà îáåñïå÷èâàạ̊ î÷åíü ̣î÷íîå óïđàâëåíèå ïî ựî́ó ôîđ́ạ̀èđîâàíè&# 8363;.

d = Äåñỵ̈è÷íîå (öåëîå ÷èñëî)
e = Íàó÷íûé
f = Óṇ̃àíîâëåííûé
g = Ăåíåđàë
m = Äåíüăè
n = ×èñëî (ïëàâà₫ùåå)
p = Óêàçạ̀åëü
s = Ṇ̃đîêà
u = Äåñỵ̈è÷íîå ÷èñëî áåç çíàêà
x = Øåṇ̃íàäöạ̀åđè&# 247;íûé "


Laguna   (2011-10-18 21:02:00) [47]

> Игорь Шевченко

> f = Установленный
> g = Генерал

Это что и откуда ?


http://www.delphibasics.ru/Format.php

точка останова for i := 0 to High(P) do- массив содержит 4 элемента


Игорь Шевченко   (2011-10-18 20:38:00) [48]


> f = Установленный
> g = Генерал


Это что и откуда ?


Плохиш   (2011-10-18 20:21:00) [49]


> параметров запроса меньше чем длина массива

На момент присваивания их вообще нет, да и запроса никакого нет.

> Laguna ©   (18.10.11 17:50) [22]

Ты б с бумажкой и карандашом перошёлся по своему "коду", да выполни его сам.


Ega23   (2011-10-18 19:02:00) [50]


> В чем дело? Что опять не так?


Вот об этом, Влад, я и писал.

> Это способ, повторюсь, для того что бы не загромождать код всякими


Не захотел поциэнт "загромождать код всякими" - теперь любится до усёру.

З.Ы. А я ещё более параноидально с некоторых пор предпочитаю делать. Я и ParamCheck в False ставлю, а параметры с их типами добавляю исключительно вручную.


Медвежонок Пятачок   (2011-10-18 18:02:00) [51]

параметров запроса меньше чем длина массива


Laguna   (2011-10-18 17:50:00) [52]

Сделал вот так

procedure SqlFromTab(St : String; const P : array of variant);
Var
 i : Integer;
begin
 with TADOQuery.Create(nil) do
  try
    ADOConnection := DM1.AdoConnection1;
    ParamCheck := True;
    SQL.Clear;
    for i := 0 to High(P) do
     Params[i].Value := P[i];
    SQL.Add(St);
    ExecSQL;
  finally
    Free;
  end;
end;


В программе запускаю процедуру

         SqlFromTab('Insert InTo OperTab (RegKod, DataDoc, NameDoc, SumDoc) Values (:p1, :p2, :p3, :p4)',
                        [RegInf.Kod, DataDocDateEdit.Date, NameDocEdit.Text,
                         DBGridEh1.Columns[4].Footer.SumValue]);


В отладку смотрю - массив заполнен, но Params[i].Value := P[i];вылетает ошибка List Index Out of Bonds. В момент трассировки P[i]AV. В чем дело? Что опять не так?


OW   (2011-10-18 17:45:00) [53]


> для даты-время - отдельная строчка

да, это атавизм, это из-за того что в проекте юзал неподготовленную в параметрах DS. А если подготовленная, то и не надо этой строчки.


> BLOB не передать толком

не передать. Тут "честно" надо.
В остальном юзается нормально пока.


> Строка и число?

не понял


> Да и по имени параметра толком не обратишься

можно, если обычно опять же писать.

Это способ, повторюсь, для того что бы не загромождать код всякими
парам = значение
парам = значение
парам = значение
открыть
когда читаем что-то рабочее, малозначительное. Зачем место тратить..


Ega23   (2011-10-18 17:29:00) [54]


> ни, соответственно, с параметрами, настроенными вдруг до
> этого, так или иначе.


Не знаю. ИМХО, всё равно фигня полная. BLOB не передать толком, для даты-время - отдельная строчка. Строка и число? Да и по имени параметра толком не обратишься.
ИМХО - ацтой, только путает.
Вот если через атрибуты RTTI как-то попробовать завязаться - это уже совсем другое дело.


OW   (2011-10-18 17:24:00) [55]

да говорю же

OpenQ(aqTmp, '', [Val]); или OpenQ(oqTmp, '', [Val]);
тут SQL = ''
а в этом случае Q.SQL.Text не меняется, ничего не происходит ни с командой, ни, соответственно, с параметрами, настроенными вдруг до этого, так или иначе.


Ega23   (2011-10-18 17:20:00) [56]


> А так она много где используется, как принимающая уже подготовленную
> строку запрса.


Так ты и давай строку запроса, а потом меняй значение параметра. Нафига при каждом изменении значенияпараметра реинициализировать всё?


> и нет никакой
> >> реинициализация CommandText и списка параметров при каждом
> вызове.


Я не знаю, как DOA себя ведёт. Но крайне рекомендую поиграться с ADO. Как с канонiчным, так и с дельфёвой реализацией.
Хотя чё там играться-то, см. TADODataSet.CommandText


Laguna   (2011-10-18 17:17:00) [57]

Я подумал что будет загвозда в передаче параметров. Ан нет, действительно можно в качестве массива из Variant


OW   (2011-10-18 17:07:00) [58]


> Это запутывание

нет, почему?
Tmp - временная ерунда, для считать по мелочи данные из БД,
что-то серьёзное - достойно самостоятельного компонента на форме/модуле
но, и к нему тоже можно применить!

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;


т.е.
OpenQ(oqTmp, '', [Val]);
и нет никакой
>> реинициализация CommandText и списка параметров при каждом вызове.


Laguna   (2011-10-18 17:07:00) [59]

>Ega23

Почему же не нужна общая процедура? Это в данном случае так получилось, что дату никак не прикрутить, кроме как через параметры. А так она много где используется, как принимающая уже подготовленную строку запрса.


Ega23   (2011-10-18 16:59:00) [60]


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


Про упрощение - спорное утверждение.
Это запутывание + реинициализация CommandText и списка параметров при каждом вызове.
В принципе, иметь такую функцию, наверное полезно. Но пользоваться ей направо и налево я бы не стал.


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

Наверх

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