![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопросы по экспорту и базам данных [D7, XP]
Defort © (2006-11-19 22:10:00)Добрый вечер, господа. Как-то (может кто помнит), меня тут послали, так как посчитали мое знание баз недостаточном, чтобы считать меня достойным разговора. Но с базами, почитав книжку, я разобрался. Теперь у меня новые вопросы:
Вопрос первый.
Мне нужно, чтобы автоматически формировалась таблица График платежей (то есть в течении всего периода действия договора - с начального по конечную дату - каждый первый день месяца производился платеж). Я пытался сначала разбить по дате, потом сосчитать количество строк, поделить на нее всю сумму и разместить по строкам (надеюсь понятно объяснил). У меня никак не получается это сделать. Вообще. Может кто поможет? о_О
Вопрос 2: по экспорту в Эксель. Все работает, но только номер договора он рассматривает как вариантный тип (то есть если я пишу номер 02.03 - он рассматривает как дату, если 17 - как число). Это не есть хорошо, так как я говорю ему рассматривать как строку. Вот мой код:
Sheet.Cells[index,1]:=DataModule1.ADOTable1.Fields.Fields[1].AsString;
Не подскажете, в чем может быть ошибка?
Заранее всех благодарю!
Defort (2006-11-26 22:06:00) [1]Я глубоко извиняюсь, но баг оказался чисто по моей тупости. В моем коде все прекрасно добавлялось, только вот проблема - тамблица была связана, поэтому полю LinkKey ничего не присваивалось, а следовательно, и не отражалось.
Я попытался исправить сей казус, но безуспешно :(
Пишу
DataModule1.ADOTable3.Insert; DataModule1.ADOTable3.FieldValues['LinkKey']:=DataModule1.ADOTable1.FieldValues[ 'Key1'];
Но LinkKey'ю ничего не присваевается(
Anatoly Podgoretsky (2006-11-26 22:03:00) [2]> Defort (26.11.2006 20:56:30) [30]
А где я ее должен увидеть?
Sam Stone (2006-11-26 21:04:00) [3]> [30] Defort © (26.11.06 20:56)
TADOQuery.close;
TADOQuery.sql.text:='insert into mytable(datefield)values(:datevar)';
TADOQuery.Parameters.ParseSQL(TADOQuery.sql.text,true);
TADOQuery.PArameters.PAramValues['datevar']:=now;
TADOQuery.execSQL;
Defort (2006-11-26 20:56:00) [4]
> В твоем, в моем коде все работает.
> А что в твоем мне не видно.
Елки-палки. Ты говоришь загадками! т.е. ты не видишь ошибку?
Anatoly Podgoretsky (2006-11-26 18:11:00) [5]> Defort (26.11.2006 18:02:28) [28]
В твоем, в моем коде все работает.
А что в твоем мне не видно.
Defort (2006-11-26 18:02:00) [6]
> В коде.
Ну это-то я понял и сам ;) Конкретно место не укажешь?
Anatoly Podgoretsky (2006-11-26 16:54:00) [7]> Defort (26.11.2006 13:42:26) [26]
> Где, блин, ошибка?
В коде.
Defort (2006-11-26 13:42:00) [8]Трассировку делать пробовал, вхождение в цикл есть. И выход есть. Но, зараза не добавляет! Я не представляю почему. По сути, Append добавляет запись в конец таблицы. После этой команды я у созданной записи меняю значение даты платежа. Потом (по идее), идет команда Post - принимаем изменение и после этого снова Append - еще одна запись.
Логически, по такой схеме должно работать! Где, блин, ошибка?
Sam Stone (2006-11-25 14:00:00) [9]во-первых, почему дата вариантом? Оно конечно универсальное... )
во-вторых, проверь, есть ли у тебя вхождение в цикл.
> Не хочется тратить времени на его изучения, хотя учить его
> все равно придется
начинай учить прям щас. Язык легкий, простые запросы через пару дней освоишь, остальное из практики придет.
> Пробовал так, у меня циклило.
пост ни при каких условиях не отвечает за выход из цикла. Тут тебе F8 в помощь.
Defort (2006-11-25 12:26:00) [10]Ох. Что то не получается никак. Пишу код:
procedure TNewGraphForm.SubKindClick(Sender: TObject);
var i:integer;
summ: real;
days, days2: variant; //íà÷àëüíàÿ è êîíå÷íàÿ äàòû
m: integer;
begin
if SubKind.ItemIndex=0 then
days:=DataModule1.ADOTable1.FieldValues['Äàòà çàêëþ÷åíèÿ'];
days2:=DataModule1.ADOTable1.FieldValues['Äàòà çàêðûòèÿ'];
days:=IncMonth(days);
FormatDateTime('dddddd', days);
FormatDateTime('dddddd', days2);
while days
Defort (2006-11-25 11:24:00) [11]
> можно поинтересоваться, чем же так SQL не нравится? :)
Не хочется тратить времени на его изучения, хотя учить его все равно придется - я планирую делать клиент-серверную программу.
> но строка вставляется как .Append и присвоение значений
> полям, по окончанию Post
Пробовал так, у меня циклило. Видимо где-то снова скривил. Буду разбираться! Спасибо!
Anatoly Podgoretsky (2006-11-24 23:43:00) [12]> Sam Stone (24.11.2006 23:39:20) [20]
Вот это уже красиво, а значит правильно.
Anatoly Podgoretsky (2006-11-24 23:42:00) [13]> Defort (24.11.2006 23:18:18) [18]
> как правильно вставить строки не используя SQL?
Вот это уже само не правильно,
но строка вставляется как .Append и присвоение значений полям, по окончанию Post
Sam Stone (2006-11-24 23:39:00) [14]> [19] Anatoly Podgoretsky © (24.11.06 23:31)
Что есть "круглая дата"? Первая миллисекунда дня/месяца года? (т.е. дробная часть = 0)?
> Есть StartOfTheMonth и IncMonth - вот это более подходит
тут да, сплоховал я что-то ) StartOfTheMonth(IncMonth(дата)) :))
> как правильно вставить строки не используя SQL?
можно поинтересоваться, чем же так SQL не нравится? :)
Anatoly Podgoretsky (2006-11-24 23:31:00) [15]> Sam Stone (24.11.2006 23:15:17) [17]
Не стал бы так рисковать IncSecond(EndOfTheMonth(Now)).
по двум причинам
1. не является круглой датой
2. результат тоже не круглая дата
Есть StartOfTheMonth и IncMonth - вот это более подходит.
Является аналогом Trunc, Day=1, IncMonth
Defort (2006-11-24 23:18:00) [16]2Anatoly Podgoretsky - огромное спасибо. На таких простых примерах мне все понятно!
> Правильно ли будет, если текущая дата 30.11.2006, чтобы
> первый платеж был 1.12.2006?
В принципе да. Я этими вопросами вообще не заведую, нужно будет у бизнес-консультанта спросить.
Если не трудно, не можешь написать как правильно вставить строки не используя SQL?
Sam Stone (2006-11-24 23:15:00) [17]> [15] Anatoly Podgoretsky © (24.11.06 22:42)
А не удобнее ли будет использование StartOfTheDay/Week/Month/Year, EndOfTheDay, IncDay, IncMonth и прочих?
Например, первый день следующего месяца IncSecond(EndOfTheMonth(Now)).
Anatoly Podgoretsky (2006-11-24 22:42:00) [18]Правильно ли будет, если текущая дата 30.11.2006, чтобы первый платеж был 1.12.2006?
Anatoly Podgoretsky (2006-11-24 22:39:00) [19]С датами не вполне правильно.
Для начало разборка и сборка нужны только для получения первого числа месяца.
Decode(StartDate, Y, M, D);
StartDate := EnCode(Y, M, 1); // первое число текущего месяца
// месяц скоректировать, прибавить 1 или 2, что бы со следующего
// IncMonth
Тоже для конечной даты или еще лучше количество месяцев, что и проще и правильнее. Если можно ввести понятие количество платежей
После того как начало конец сформированы, цикл совсем простой.
while StartDate <= EndDate
операции
IncMonth
end;
С количеством платежей еще проще
for I := 1 to PayCount do begin
операции
IncMonth
end;
Sam Stone (2006-11-24 22:36:00) [20]> [13] Defort © (24.11.06 22:27)
в аксесе коммитов нема. черт знает, почему не вставляется, лень разбираться. Я обычно инсертами добавляю.
> Когда я писал IncMonth(days) у меня циклило (days - дата)
[6]
надо лучше курить справку. Для TDateTime IncMonth это функция, поэтому правильно будет days:=IncMonth(days);