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

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

Вопросы по экспорту и базам данных [D7, XP]


Страницы:   1 2

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);


Страницы:   1 2

Наверх

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