2012-04-29 1 views
2

Я хочу создать почтовую почту для письма, введя разные имена и адреса для каждого. Я использовал пример Microsoft в качестве базовой точки http://support.microsoft.com/kb/229310, и я настроил его так, как мне нравится. Но моя проблема возникает при попытке получить данные для выбранных строк dbgrid или всего всего. Я понятия не имею, как это сделать. Моя первая мысль заключалась в том, чтобы сделать 1 с количеством строк, а затем положить некоторые ящики с тедитом и поместить их равными почтовым данным, но это все равно только по одному. Dbgrid связан с перспективой ms. Это, как они заполняют данные ..Ввод данных из dbgrid в слияние слов

// Open the file to insert data 
wrdDataDoc := wrdApp.Documents.Open('E:\Temp.doc'); 
for iCount := 1 to (DBGrid1.DataSource.DataSet.RecordCount) do 
wrdDataDoc.Tables.Item(1).Rows.Add; 
FillRow(wrdDataDoc, 2, 'Steve', 'DeBroux', 
    '4567 Main Street', 'Buffalo, NY 98052'); 
// Fill in the data 
FillRow(wrdDataDoc, 3, 'Jan', 'Miksovsky', 
    '1234 5th Street', 'Charlotte, NC 98765'); 
FillRow(wrdDataDoc, 4, 'Brian', 'Valentine', 
    '12348 78th Street Apt. 214', 'Lubbock, TX 25874'); 

Так как я бы захватить данные из DBGrid и заполнить файл с этой информацией?

+1

DBGrid1.DataSource.DataSet.FieldByName ('имя'). AsString? –

+0

Спасибо за ответ, я получаю сообщение об ошибке «недостаточно фактических параметров». Кроме того, размер может быть изменен, поэтому есть ли сделать это для нескольких строк? Могу ли я делать цикл из 1 в любое количество записей, заполнять строку данными и каждый раз добавлять их к числу? – captiv

+1

Посмотрите на ответ, который я разместил. –

ответ

5
var 
    i: Integer; 
    bm: TBookmark; 
begin 
    DBGrid1.DataSource.DataSet.DisableControls; 
    try 
    bm := DBGrid1.DataSource.DataSet.GetBookmark; 
    try 
     i := 0; 
     DBGrid1.DataSource.DataSet.First; 
     while not DBGrid1.DataSource.DataSet.Eof do begin 
     Inc(i); 
     FillRow(wrdDataDoc, i, 
      DBGrid1.DataSource.DataSet.FieldByName('Name').AsString, 
      DBGrid1.DataSource.DataSet.FieldByName('Address1').AsString, 
      .. 
     ); 
     DBGrid1.DataSource.DataSet.Next; 
     end; 
     if Assigned(bm) then 
     DBGrid1.DataSource.DataSet.GotoBookmark(bm); 
    finally 
     DBGrid1.DataSource.DataSet.FreeBookmark(bm); 
    end; 
    finally 
    DBGrid1.DataSource.DataSet.EnableControls; 
    end; 
end; 
+0

Ничего себе, спасибо! 2 Небольшие ошибки теперь, хотя ожидается «END», но «НАКОНЕЦ», это последнее, наконец, и EXCEPT или FINALLY ожидаются, и это на втором и последнем конце. – captiv

+1

@captiv - Добро пожаловать! Сорр за недостающий «конец» :). –

+0

Мне очень жаль беспокоить вас, но теперь у меня другая ошибка. «неправильная операция варианта», и это находится в строке 'Doc.Tables.Item (1) .Cell (строка, 1) .Range.InsertAfter (Text1);' И это в процедуре заполнения строки, предоставляемой ms. Я знаю, что это не часть кода, который вы мне дали, но я не уверен в том, что вызывает его. – captiv

1

Хм, это дает мне немного подсказки о том, как использовать Закладки для управления выбранными в DBGrid. Моя проблема заключается в том, чтобы читать определенные поля выбранных строк, например, извлекать адреса электронной почты (или идентификатор записи) выбранных контактов (записей), чтобы, возможно, отправлять электронную почту. Любая дополнительная информация об использовании TBookmarkList и TBookmark была бы полезна :) Too Easy ... кажется, единственный способ прокрутки TBookmarkLIst использует свойство Count, и использует его Item [index] в качестве TBookmark. Затем он используется для dataset.gotBookMark, а затем для доступа к требуемому имени поля (имя поля).

Я хотел бы ...

For bmBookmark in bmlBookmarkList do 

, но это работает ...

var bmlGridSelectedRows: TBookmarkList; 
     bmRecord: TBookmark; 
     I: Integer; 
begin 
    JvdbUltimGridContacts.DataSource.DataSet.DisableControls; 
    bmlGridSelectedRows := JvdbUltimGridContacts.SelectedRows; 

    for I := 0 to bmlGridSelectedRows.Count - 1 do 
    begin 
     bmRecord := bmlGridSelectedRows.Items[I]; 
     ABSTableContacts.GotoBookmark(bmRecord); 
     MessageDlg(ABSTableContacts.FieldByName('DisplayName').AsString,mtInformation,[mbOK],0); //this is just to show that you are accessing the correct record you expect, replace with your own code of course 
    end; 
    JvdbUltimGridContacts.DataSource.DataSet.EnableControls; 

Хороший наконечник о свойствах Dataset.DisableControls/EnableControls, :)

Конечно вам не нужно объявлять переменные для TbookmarkList и TBookmark, поскольку к ним можно получить доступ напрямую, я просто привык делать это, поскольку я думаю, что это более чистый код. т.е.

DBGrid.DataSource.DataSet.DisableControls; 

    for I := 0 to DBGrid.SelectedRows.Count - 1 do 
    begin 
     ABSTableContacts.GotoBookmark(DBGrid.SelectedRows.Items[I]); 
     MessageDlg(ABSTableContacts.FieldByName('DisplayName').AsString,mtInformation,[mbOK],0); 
    end; 
    DBGrid.DataSource.DataSet.EnableControls; 

 Смежные вопросы

  • Нет связанных вопросов^_^