![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здрасте. У меня такая беда: не знаю, как сделать так, что бы при добавлении строки из таблицы 1 строке присваился номер 1, добавляю из другой таблицы значение 1.1, из второй же таблицы 1.2, из третьей таблицы 1.1.1, 1.2.1...т.е. пунты и подпункты нужно формировать. как это сделать можно? вставляю в дбгрид, значения другого дб грида
|
|
#2
|
||||
|
||||
|
Я из этой абракадабры ничего не понял.
|
|
#3
|
|||
|
|||
|
есть 3 таблицы: а,б и ц.
вставляем одно значение из таблицы а. получаем пункт а. вставляем одно значение из таблицы б. получаем подпункт б. т.е. а.б. из третьей таблицы вставляется 2 значения, имеем: а.б.ц.ц. |
|
#4
|
||||
|
||||
|
Вместо DBGrid используйте для наполнения StringGrid, тогда в завершении забивки можно будет пробежаться по полям и произвести автонумерацию на ваших условиях и без последствий для содержимого таблиц
|
|
#5
|
|||
|
|||
|
Цитата:
таблица в итоге может быть очень большой и нужно автоматически и при помощи именно дб грида |
|
#6
|
||||
|
||||
|
DBGrid является средством визуализации содержимого полей таблицы\результата SQL-запроса, при изменении содержимого ячеек меняется и значение в источнике, что не всегда айс
|
|
#7
|
|||
|
|||
|
получается, что я эту таблицу потом вывожу в ворд, как отчет, здесь это как-то задать можно?
процедура вывода: Код:
procedure TForm1.N2Click(Sender: TObject);
const//зазадается рапределение данных на листе
wdAlignParagraphCenter = 1;
wdAlignParagraphLeft = 0;
wdAlignParagraphRight = 2;
wdLineStyleSingle = 1;
var
sd: TSaveDialog;
wdApp, wdDoc, wdRng, wdTable : OLEVariant;
i, j, Res : Integer;
D : TDateTime;
Bm : TBookMark;
begin
Sd := SaveDialog1;
{Сохранение таблицы в документ, запрос разрешения для сохранения}
if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0) );
if not Sd.Execute then Exit;
if FileExists(Sd.FileName) then begin
Res := MessageBox(0, Файл с данным именем уже существует. Перазаписать?'
, Внимание! ', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
if Res <> IDYES then Exit;
end;
// запуск MS Word.
try
wdApp:=CreateOleObject('word.Application') ;
except
MessageBox(0, ' Не удалось запустить MS Word. Действие отменено..'
,’внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
Exit;
end;
//окно MS Word. видимо.
wdApp.Visible := True;
//создание нового документа.
wdDoc := wdApp.Documents.Add;
wdApp.ScreenUpdating := False;
try
wdRng := wdDoc.Content; // Диапазон, охватывающий всё содержимое документа.
//Заголовок отчета
wdRng.InsertAfter(План финансово-хозяйственной деятльености' '#13#10);
//выравнивание по центру
wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
//параметры шрифта.
wdRng.Font.Name := 'Times New Roman';
wdRng.Font.Bold := True;
wdRng.Font.Size := 12;
//диапазон нового параграфа непосредственно за текущим диапазоном.
wdRng.Start := wdRng.End;
wdRng.InsertAfter(#13#10);
D := Now;
wdRng.InsertAfter('дата: ' + FormatDateTime('dd.mm.yyyy', D) + #13#10);
wdRng.InsertAfter('время: ' + FormatDateTime('hh:nn:ss', D) + #13#10);
// Сброс параметров параграфа.
wdRng.ParagraphFormat.Reset;
wdRng.InsertAfter('утверждаю '+ #13#10 );
wdRng.InsertAfter('главный бухгалтер' + #13#10);
wdRng.InsertAfter('Начальник преприятия + #13#10);
wdRng.ParagraphFormat.Alignment := wdAlignParagraphRight;
wdRng.ParagraphFormat.Reset;
//выравнивание по левому краю.
wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
// Параметры шрифта.
wdRng.Font.Reset;
wdRng.Font.Size := 12;
wdRng.Font.Bold := True;
// Заголовок таблицы.
wdRng.Start := wdRng.End;
wdRng.InsertAfter(('Таблица '#13#10);
wdRng.ParagraphFormat.Reset;
wdRng.Font.Reset;
wdRng.Font.Size := 12;
wdRng.Font.Bold := False;
// Таблица.
if not ADOTable1.Active then ADOTable1.Open;
wdRng.Start := wdRng.End;
// Добавляем таблицу MS Word. создаём таблицу с двумя строками.
wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, 2, ADOTable1.Fields.Count);
// Параметры линий таблицы
wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
// Сброс параметров параграфа.
wdRng.ParagraphFormat.Reset;
// Выравнивание всей таблицы - по левому краю
wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
// Оформление шапки
wdRng := wdTable.Rows.Item(1).Range; // Диапазон первой строки.
wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
wdRng.Font.Size := 10;
wdRng.Font.Bold := True;
// Оформление первой строки данных - вторая строка в таблице
// При добавлении следующих строк, их оформление будет копироваться с этой строки.
wdRng := wdTable.Rows.Item(2).Range; //Äèàïàçîí âòîðîé ñòðîêè.
wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
wdRng.Font.Size := 10;
wdRng.Font.Bold := False;
//шапка таблицы.
for i := 0 to ADOTable1.Fields.Count - 1 do
wdTable.Cell(1, i + 1).Range.Text := ADOTable1.Fields[i].DisplayName;
//данные таблиц.
ADOTable1.DisableControls;
Bm := ADOTable1.GetBookMark;
ADOTable1.First;
i := 1; //текущая строка в MS Word.
while not ADOTable1.Eof do begin
Inc(i);
// Если требуется, добавляем новую строку в конец таблицы.
if i > 2 then wdTable.Rows.Add;
// Записываем данные в строку таблицы MS Word.
for j := 0 to ADOTable1.Fields.Count - 1 do
wdTable.Cell(i, j + 1).Range.Text := ADOTable1.Fields[j].AsString;
ADOTable1.Next;
end;
ADOTable1.GotoBookMark(Bm);
ADOTable1.EnableControls;
finally
// Включение перерисовки окна MS Word.
wdApp.ScreenUpdating := True;Последний раз редактировалось pochemuch, 22.06.2015 в 00:26. |
|
#8
|
||||
|
||||
|
Вам необходимо формировать вордовский документ на основе данных из таблиц, а не данные подгонять под шаблон, нумерацию пунктов\подпунктов лучше производить там
З.Ы. Вот пример автонумерации ячеек вордовской таблички нарисовался из drkb Последний раз редактировалось Alegun, 22.06.2015 в 01:10. |