给你一个例子作参考DLL文件在Delphi的创建及调用
    现时系统的开发,多数都在几人以上的组合,合作方式开发,这样也方便系统的快速开发目的。而DLL的方法最为方便。
一.函数过程的写法:
library FIRSTDLL;
uses   SysUtils, Classes;
{$R *.RES}
// 1.定义函数具体过程和输出接口方式   // 函数 1    // 功能:事数据3倍放大函数
function PenniesToSoins(SourceResult:Integer):Integer;stdCall;
begin
 if SourceResult>0 then
   Result:=SourceResult*3 //结果存放于Result
 else
   Result:=SourceResult;
end;
exports 
 PenniesToSoins; //2.函数输出口定义
end.
二.在DLL中创建Form
1.一步,创建DLL工程,及加入设置好的Form
library MGRPERSN;
uses   SysUtils, Classes,
 MGRPERFM in 'MGRPERFM.pas' {FormPERSON};//1.Form的代码(与一般的Form一样)
{$R *.RES}
exports
  ShowPerSN;//2.函数输出口定义
begin
end.
2. 在DLL设定的Form的设置 
unit MGRPERFM;
interface
uses         Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, ToolWin, ImgList;
type
 TFormPERSON = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;
//些处的变量不再用,给其改个地方,如下(改变之一)
//var  FormPERSON: TFormPERSON;
{ Declare the export function 宣布Form函数出口}//改变之二
function ShowPerSN(AHandle: THandle; ACaption: String):BOOL; StdCall;
implementation
{$R *.DFM}   //函数据过程定义
function ShowPerSN(AHandle: THandle; ACaption: String):BOOL;
var   FormPERSON: TFormPERSON; //定义窗体类(上面的放到了此处)
begin
//拷贝应用程式句柄给DLL的应有程式对象
 Application.Handle := AHandle;
 FormPERSON := TFormPERSON.Create(Application);//创建控件TForm
 try
   FormPERSON.Caption := ACaption;
   FormPERSON.ShowModal;//显示此Form      
   Result := False; //反回成功值
 finally
   FormPERSON.Free;
 end;
end;
三.DLL中函数及窗体的调用
1.调用方法一
implementation //在此的下方写明调用函数的DLL
{$R *.DFM}//DLL内函数调用
function PenniesToSoins(SourceResult:Integer):Integer;  StdCall external 'FIRSTDLL.DLL';
2.调用方法二
type  //在此创建一个函数类
{ First, define a procedural data type, this should reflect the procedure that is exported from the DLL. }
 { Create a new exception class to reflect a failed DLL load }
 TShowPerSN = function (AHandle: THandle; ACaption: String): BOOL; StdCall;
 EDLLLoadError = class(Exception);//同时创建一个出错记录类
TMAINCLTR = class(TForm) //这里不变,系统自动生成
procedure TMAINCLTR.ToolButton1Click(Sender: TObject);
var  //按钮的调用事件:调用过程
 LibHandle: THandle;   ShowPerSN: TShowPerSN;
begin
 Application.Title:='人力资源管理系统DLL文件测试程式';
 LibHandle := LoadLibrary('MGRPERSN.DLL'); { Attempt to load the DLL 尝试装入DLL文件}
 try
   if LibHandle = 0 then
     raise EDLLLoadError.Create('Unable to Load DLL(无法成功装入MGRPERSN.DLL)');
   @ShowPerSN := GetProcAddress(LibHandle, 'ShowPerSN');
   if not (@ShowPerSN = nil)  then  ShowPerSN(Application.Handle, '人事资料管理')//呼叫出窗体
   else     RaiseLastWin32Error;
 finally
   FreeLibrary(LibHandle); // Unload the DLL.
 end;
end;

解决方案 »

  1.   

    Query 可以动态地创建,Query1 := TQuery.Create; 不必显式地放在Form中。
    可以动态创建,动态设置属性。
      

  2.   

    现在我用了Database和Query两种控件可是在连接时总是让我输入UserName和PassWord但是我已把Database的Loginprompt设置为了false;并且输入了
    DATABASE NAME=
    USER NAME=zgc
    ODBC DSN=csspark
    OPEN MODE=READ/WRITE
    BATCH COUNT=200
    LANGDRIVER=
    MAX ROWS=-1
    SCHEMA CACHE DIR=
    SCHEMA CACHE SIZE=8
    SCHEMA CACHE TIME=-1
    SQLPASSTHRU MODE=SHARED AUTOCOMMIT
    SQLQRYMODE=
    ENABLE SCHEMA CACHE=FALSE
    ENABLE BCD=FALSE
    ROWSET SIZE=20
    BLOBS TO CACHE=64
    BLOB SIZE=32
    Password=zgc7622但是在运行时依然出现请输入的提示这是为何呢???
      

  3.   

    chinajavis(我选择 我喜欢)
    你说得动态创建一个Query能给一段代码吗??
      

  4.   

    var
      Query: TQuery;
    begin
      Query := TQuery.Create(self);
      Query.DatabaseName := 'LocalServer';
      Query.Close;
      Query.SQL.Clear;
      Query.SQL.Add('select * from Stock');
      Query.Open;
      if Query.RecordCount<=0 then
        Exit;
      with Query do
      begin
        First;
        while not Eof do
        begin
          ShowMessage(FieldByName('CustomID').AsString);
          Next;
        end;
      end;
      Query.Free;
    end;
      

  5.   

    上面的代码单元中当然应该uses Db, DBTables两个单元