The code below assumes that a PrintJob is already open.
PEGetNTables, PEGetNthTableType, PESetNthTableLogOnInfo, PETestNthTableConnectivity, PEGetSQLQuery, PESetSQLQuery PEGetHandleString
uses CRDelphi;
{Stringlists to store the LogOn information}
var
sQuery : TStringList;
procedure GetSQLQuery;
var
TableType : PETableType;
LogInfo : PELogOnInfo;
nTables, nTable : Smallint;
hText : hWnd;
nTextLen : smallint;
pRptCurrent : PChar;
begin
TableType.StructSize := SizeOf(PETableType);
LogInfo.StructSize := SizeOf(PELogOnInfo);
{We must establish a Server connection before retrieving SQL Query}
{Get # of Tables}
nTables := PEGetNTables(PrintJob);
if nTables = -1 then
{Do Error Handler};
{Loop through the tables}
for nTable := 0 to (nTables - 1) do
begin
if not PEGetNthTableType(PrintJob, nTable, TableType) then
{Do Error Handler};
{Try to find a SQL table}
if (TableType.DBType = PE_DT_SQL) or
(TableType.DBType = PE_DT_SQL_STORED_PROCEDURE) then
begin
StrPCopy(@LogInfo.ServerName, 'SqlServerOne');
StrPCopy(@LogInfo.UserID, 'James Bond');
StrPCopy(@LogInfo.Password, '007');
StrPCopy(@LogInfo.DatabaseName, 'pubs');
{Set LogOnInfo, propagating across all tables}
if not PESetNthTableLogOnInfo(PrintJob, nTable, LogInfo, True) then
{Do Error Handler};
{Test LogOn}
if not PETestNthTableConnectivity(PrintJob, nTable) then
{Do Error Handler};
Break;
end;
end;
{Get the SQL Query}
nTextLen := 0;
if PEGetSQLQuery(PrintJob, hText, nTextLen) then
begin
{Allocate memory for temporary PChar}
pRptCurrent := StrAlloc(nTextLen);
{Retrieve the Query from the handle}
if (nTextLen > 1) then
begin
if not PEGetHandleString(hText, pRptCurrent, nTextLen) then
begin
StrDispose(pRptCurrent);
{Do Error Handler};
end;
sQuery := TStringList.Create;
sQuery.SetText(pRptCurrent);
end;
StrDispose(pRptCurrent);
end;
end;
procedure SetSQLQuery;
begin
{Send the Query}
if not PESetSQLQuery(PrintJob, sQuery.GetText) then
begin
sQuery.Free;
{Do Error Handler};
end;
{Free the Query StringList}
sQuery.Free;
end;
| Seagate Software IMG Holdings, Inc. http://www.seagatesoftware.com Support services: http://support.seagatesoftware.com |