我想为每封输入不同姓名和地址的信件创建邮件服务。我使用Microsoft示例作为基点http://support.microsoft.com/kb/229310,我已经根据自己的喜好对其进行了定制。但是当我试图获取dbgrid的选定行或整个事件的数据时,我的问题出现了。我不知道该怎么做。我的第一个想法是对行数量做1,然后放下一些tedit框并将它们等于mailmerged数据,但这仍然只是一次一个。 dbgrid链接到ms outlook。 这就是他们填写数据的方式..
// 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中获取数据并用该信息填充文件?
答案 0 :(得分: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;
答案 1 :(得分:1)
嗯,这给了我一些关于如何使用书签来管理DBGrid中的选择器的线索。 我的问题是能够读取selectedRows的某些字段,例如提取所选联系人(记录)的电子邮件地址(或记录ID号),或许可以发送电子邮件到。 有关使用TBookmarkList和TBookmark的任何进一步信息将有所帮助:) 太容易了...似乎循环使用TBookmarkLIst的唯一方法是使用其Count属性, 并使用其Item [index]作为TBookmark。然后将其用于dataset.gotBookMark,然后访问所需的fieldByName('Fieldname')。
我会喜欢......
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;