有关delphi的odbc编程

zwk_9 2009-07-13 10:59:20
加精
想设计这样一个软件:系统中只对ODBC编程,
当在用户机器上安装的时候,自动判断其操作系统中安装了何种数据库,并在相应的数据库引擎中创建数据库
我只知道delphi注册ODBC的方法,但是对整个思路很迷茫,知道的或有相应经验的提供一下思路啊~~~
...全文
377 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxinglu1 2010-09-25
  • 打赏
  • 举报
回复
学习了
qq363985833 2010-05-20
  • 打赏
  • 举报
回复
ODBC不是直接在系统配置就可以了么
叁宝 2010-04-13
  • 打赏
  • 举报
回复
学习了
ZZTea 2010-01-15
  • 打赏
  • 举报
回复
强!!
jackiexzx 2009-08-07
  • 打赏
  • 举报
回复
好像没有检测到*.mdf
天才OR努力 2009-07-30
  • 打赏
  • 举报
回复
进来学习一下!
meizizh 2009-07-23
  • 打赏
  • 举报
回复
来学习了,谢谢
wfl568 2009-07-14
  • 打赏
  • 举报
回复
Mark
超维电脑科技 2009-07-14
  • 打赏
  • 举报
回复
关注。
Tomzzu 2009-07-14
  • 打赏
  • 举报
回复
好贴, 边学边顶
sushou2009 2009-07-14
  • 打赏
  • 举报
回复
进来学习~
zouyx317 2009-07-14
  • 打赏
  • 举报
回复
学习了
1楼很强大.
liupanpan 2009-07-14
  • 打赏
  • 举报
回复
提供一下思路
sparklerl 2009-07-14
  • 打赏
  • 举报
回复
Mark

好东西

thx
b330225 2009-07-14
  • 打赏
  • 举报
回复
见识了。学习
faguan 2009-07-14
  • 打赏
  • 举报
回复
顶一下,学习学习!
tnwsh 2009-07-13
  • 打赏
  • 举报
回复
强烈关注!
dinoalex 2009-07-13
  • 打赏
  • 举报
回复
不错不错
winstonbonaparte 2009-07-13
  • 打赏
  • 举报
回复
上面的程序在我电脑上的运行结果:
Button1Click:
SQL Server
Microsoft Access Driver (*.mdb)
Microsoft Text Driver (*.txt; *.csv)
Microsoft Excel Driver (*.xls)
Microsoft dBase Driver (*.dbf)
Microsoft Paradox Driver (*.db )
Microsoft Visual FoxPro Driver
Microsoft FoxPro VFP Driver (*.dbf)
Microsoft dBase VFP Driver (*.dbf)
Microsoft Access-Treiber (*.mdb)
Microsoft Text-Treiber (*.txt; *.csv)
Microsoft Excel-Treiber (*.xls)
Microsoft dBase-Treiber (*.dbf)
Microsoft Paradox-Treiber (*.db )
Microsoft Visual FoxPro-Treiber
Driver do Microsoft Access (*.mdb)
Driver da Microsoft para arquivos texto (*.txt; *.csv)
Driver do Microsoft Excel(*.xls)
Driver do Microsoft dBase (*.dbf)
Driver do Microsoft Paradox (*.db )
Driver para o Microsoft Visual FoxPro
Microsoft ODBC for Oracle
MySQL ODBC 3.51 Driver

Button2Click:
MS Access Database/Microsoft Access Driver (*.mdb)
Excel Files/Microsoft Excel Driver (*.xls)
dBASE Files/Microsoft dBase Driver (*.dbf)
_iamp/MySQL ODBC 3.51 Driver
Xtreme Sample Database 2005 CHS/Microsoft Access Driver (*.mdb)
QT_Flight32/Microsoft Access Driver (*.mdb)
LocalServer/SQL Server
winstonbonaparte 2009-07-13
  • 打赏
  • 举报
回复
再给你看个例子吧

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function BreakList(const ANullTerminateText: array of Char): String;
end;
type
USHORT = Word;

SQLSMALLINT = SHORT;
SQLRETURN = SQLSMALLINT;
SQLINTEGER = Longint;
SQLHANDLE = SQLINTEGER;
SQLHENV = SQLHANDLE;
SQLUSMALLINT = USHORT;
SQLPCHAR = PChar;

const
// DLL名
odbc32 = 'odbc32.dll';

SQL_SUCCESS = 0;
SQL_SUCCESS_WITH_INFO = 1;
SQL_INVALID_HANDLE = -2;
SQL_ERROR = -1;
SQL_NO_DATA = 100;
SQL_NO_DATA_FOUND = SQL_NO_DATA;

SQL_FETCH_NEXT = 1;
SQL_FETCH_FIRST_USER = 31;
SQL_FETCH_FIRST_SYSTEM = 32;
SQL_FETCH_FIRST = 2;

SQL_MAX_DSN_LENGTH = 32;

// SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE, SQL_ERROR
function SQLAllocEnv(var EnvironmentHandle: SQLHENV): SQLRETURN;
stdcall; external odbc32 name 'SQLAllocEnv';

function SQLFreeEnv(EnvironmentHandle: SQLHENV): SQLRETURN;
stdcall; external odbc32 name 'SQLFreeEnv';

// SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_ERROR, SQL_INVALID_HANDLE.
function SQLDrivers(
EnvironmentHandle: SQLHENV;
Direction: SQLUSMALLINT;
DriverDescription: SQLPCHAR;
BufferLength1: SQLSMALLINT;
var DescriptionLengthPtr: SQLSMALLINT;
DriverAttributes: SQLPCHAR;
BufferLength2: SQLSMALLINT;
var AttributesLengthPtr: SQLSMALLINT): SQLRETURN;
stdcall; external odbc32 name 'SQLDrivers';

// SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_ERROR, SQL_INVALID_HANDLE.
function SQLDataSources(
EnvironmentHandle: SQLHENV;
Direction: SQLUSMALLINT;
ServerName: SQLPCHAR;
BufferLength1: SQLSMALLINT;
var NameLength1Ptr: SQLSMALLINT;
Description: SQLPCHAR;
BufferLength2: SQLSMALLINT;
var NameLength2Ptr: SQLSMALLINT): SQLRETURN;
stdcall; external odbc32 name 'SQLDataSources';

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.BreakList(const ANullTerminateText: array of Char): String;
var
LStart: Integer;
LBuffer: array[0..255] of Char;
LText: String;
begin
LStart := 0;
LText := ANullTerminateText;
Result := LText;
Inc(LStart, Length(LText) + 1);
while (True) do
begin
FillChar(LBuffer, SizeOf(LBuffer), 0);
Move(ANullTerminateText[LStart], LBuffer, SizeOf(LBuffer));
LText := LBuffer;
Inc(LStart, Length(LText) + 1);
if (LText = '') then Break;
Result := Result + ',' + AnsiQuotedStr(LText, '"');
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
BUF_MAX = 1024;
var
LEnvironmentHandle: SQLHENV;
LDriverDescription: array[0..BUF_MAX] of Char;
LDescriptionLengthPtr: SQLSMALLINT;
LDriverAttributes: array[0..BUF_MAX] of Char;
AttributesLengthPtr: SQLSMALLINT;
LReturn: SQLRETURN;
LText: String;
begin
Memo1.Clear();

try
if (SQLAllocEnv(LEnvironmentHandle) = SQL_ERROR) then Exit;

try
FillChar(LDriverDescription, SizeOf(LDriverDescription), 0);
FillChar(LDriverAttributes, SizeOf(LDriverAttributes), 0);

LReturn := SQLDrivers(LEnvironmentHandle, SQL_FETCH_FIRST,
LDriverDescription, BUF_MAX + 1, LDescriptionLengthPtr,
LDriverAttributes, BUF_MAX + 1, AttributesLengthPtr);

while (LReturn <> SQL_NO_DATA_FOUND) do
begin
LText := String(LDriverDescription);// + '/' + BreakList(LDriverAttributes);
Memo1.Lines.Add(LText);

FillChar(LDriverDescription, SizeOf(LDriverDescription), 0);
FillChar(LDriverAttributes, SizeOf(LDriverAttributes), 0);

LReturn := SQLDrivers(LEnvironmentHandle, SQL_FETCH_NEXT,
LDriverDescription, BUF_MAX + 1, LDescriptionLengthPtr,
LDriverAttributes, BUF_MAX + 1, AttributesLengthPtr);
end;

finally
SQLFreeEnv(LEnvironmentHandle);
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
BUF_MAX = 1024;
var
LEnvironmentHandle: SQLHENV;
LServerName: array[0..SQL_MAX_DSN_LENGTH] of Char;
LNameLength1Ptr: SQLSMALLINT;
LDescription: array[0..BUF_MAX] of Char;
LNameLength2Ptr: SQLSMALLINT;
LReturn: SQLRETURN;
LText: String;
begin
Memo1.Clear();

try
if (SQLAllocEnv(LEnvironmentHandle) = SQL_ERROR) then Exit;

try
FillChar(LServerName, SizeOf(LServerName), 0);
FillChar(LDescription, SizeOf(LDescription), 0);

LReturn := SQLDataSources(LEnvironmentHandle, SQL_FETCH_FIRST,
LServerName, SQL_MAX_DSN_LENGTH + 1, LNameLength1Ptr,
LDescription, BUF_MAX + 1, LNameLength2Ptr);

while (LReturn <> SQL_NO_DATA_FOUND) do
begin
LText := String(LServerName) + '/' + BreakList(LDescription);
Memo1.Lines.Add(LText);

FillChar(LServerName, SizeOf(LServerName), 0);
FillChar(LDescription, SizeOf(LDescription), 0);

LReturn := SQLDataSources(LEnvironmentHandle, SQL_FETCH_NEXT,
LServerName, SQL_MAX_DSN_LENGTH + 1, LNameLength1Ptr,
LDescription, BUF_MAX + 1, LNameLength2Ptr);
end;

finally
SQLFreeEnv(LEnvironmentHandle);
end;
except
on E:Exception do Memo1.Lines.Add(E.Message);
end;
end;

end.
加载更多回复(9)
不规则窗口的建立(字体窗体) 在Delphi中自动检测、建立数据库别名和表格 用Delphi制作留言板 用DEPHI 3.0实现动画ABOUT窗口 在DELPHI中处理时间 如何为Delphi程序添加事件和事件处理器 在DELPHI程序中使用ADO对象存取ODBC数据库 轻轻松松在DELPHI3.0中实现三态按钮 Api函数列表【与文件有关】 Api函数列表【与打印有关】 Delphi中TApplication类的巧用 Delphi 中自做动态显示的控件 DELPHI 中 自 适 应 表 单 的 实 现 在Delphi 中 利 用 Tbatch 组 件 如何在注册表中注册BDE 如何在标题栏上增加按钮 CGI技术及其开发(一) CGI技术及其开发(二) 用Delphi实现壁纸更换 在Delphi中获取和修改文件的时间 任何动态改变/添加网络设置中的 TCP/IP 的 DNS 地址 让彩色光标出现在Delphi程序中 面向组件的系统开发方法 COM/DCOM中如何传递数组 COM/DCOM的区别与联系 定制Delphi应用程序的系统菜单 Delphi 3中Cookie的建立使用 一 个 实 用 的Delphi 屏 幕 拷 贝 程 序 的 设 计 用Delphi制作动态菜单 用Delphi进行OpenGL编程学习心得 开 发 基 于ORACLE7 数 据 库 的 管 理 信 息 系 统 用Delphi 实 现 自 定 义 颜 色 对 话 框 及 其 构 件 Delphi自定义消息应用一例 自 定 义 快 速 报 表 的 打 印 预 览 窗 口 如何把文件删除到回收站中 在Delphi与C 之间实现函数与对象共享 编 译 错 误 信 息 DELPHI AND THE INTERNET by Charlie Calvert [1] DELPHI AND THE INTERNET by Charlie Calvert [2] Delphi之快速设计(程序设计篇) Delphi之快速设计(界面设计篇) 在DELPHI2.0/3.0中直接操作端口 开 发AS/400 应 用 系 统: PB5 与Delphi3 的 比 较 检查驱动器是否就绪 在Delphi应用程序中拖动控件 用修改文件时间的方法来加密文件 资 源 文 件 在DELPHI 中 的 使 用 怎样建立简单的任务栏应用程序 控 制 系 统 菜 单 用Dephi 程 序 维 护Paradox 数 据 表 的 索 引 用Delphi实现无边界窗体的移动 Delphi函数参考手册
ToolBar工具栏控件的使用 动态建立主菜单选项 窗口界面的动态分隔条 动态设置选项卡页面 在标题栏中自定义按钮 窗体开合窗帘效果 Windows XP界面效果 实现OutLook滚动工具栏效果 在下拉列表框中显示树形视图 自定义系统的About项 修改系统级菜单 实现透明窗体效果 爆破特技窗体 只允许建立一次子窗体的MDI程序 从外部DLL中调用子窗口 新颖的资源管理器界面 如何生成半圆形窗口 制作字幕滚动窗体 详解Canvas生成渐变色窗口背景 WINAPM风格磁化窗口 软件封面的图片显示制作 实现图片的任意角度旋转 奇妙的拼图游戏 使用PaintBox控件制作画图程序 使用DrawGrid控件制作五子棋 多彩的数据报表 按压缩比将BMP转换为JPG 16位真彩转换到256色 调整图片的RGB对比度 实现图像的灰度级处理效果 3种像素历遍方法的比较和实现 实现屏幕拷贝 实现图像漫游 4种幕布式图像显示技巧 盘旋法实现9种滤镜效果 图形朦胧叠合显示技巧 给MDI主窗体增加背景 实现图像的淡入淡出显示 多媒体播放器 播放AVI文件 根据客户端IP地址获取计算机名 实现多线程IP和DomainName相互转换 Windows2000下的Popup发送功能 如何实现Ping操作 实现多线程共享探测 实现Windows95/98的I/O端口读写 收发电子邮件与监视网络服务器资源 使用WebBrower制作浏览器 可视化的Ping工具 使用IdMappedPortTCP进行端口映射 动态设置ODBC数据源 用ADO控件打开Access数据库 DBGrid中的记录到Html页面的转换 在DBGrid中实现任意方向查找 在DBGrid中通过动态下拉列表查找记录 用DBGrid组件制作下拉列表形式的提示框 利用书签处理DBGrid中的多个记录 将ComboBox中的内容直接拖放到DBGrid里 如何在DBGrid里放置图标 DBGrid控件精彩组合 DBChart图表控件的使用 在StringGrid组件中显示查询结果 使用流对象(Tstream)实现数据表中Tmemo字段的显示 如何动态建立SQLServer ODBC SQL浏览器 在SQL查询中使用动态参数 事务工作原理 标准/模糊查询 筛选数据 数据字典查看器 TDecisionGraph决策组件的使用 明细表(Master/Detail)结构 像处理文本资料一样处理数据表中的信息 远程数据库登录 远程数据库的离线处理 在远程数据库中实现主从表关系 动态设置远程数据库的查询参数 在远程数据库中计算统计值 多线程与数据库 使用远程存储过程 数据模块的同步显示 建立Web服务的数据提供端 建立Web服务的数据访问端 开发WebSnap数据库程序 建立ActiveForm数据浏览 建立数据查询WebServices服务器端 数据查询Web服务客户端开发 基于WAP的手机无线应用 建立基本Web数据库服务器应用 建立类型库编辑DataSnap服务端 建立查询条件Web数据库服务器应用 建立基本MTS服务端 建立MTS数据访问客户端 建立IntraWeb数据浏览 将程序图标设置到Windows系统托盘 取得和修改文件的创建和修改日期 通过流式数据实现文件分割与合并 实现指定扩展名文件和相应程序的关联 获取汉字拼音的首字母 监视剪贴板 在IE工具栏上增加一个按钮图标 软件注册机制的建立 复活节彩蛋的制作 SkinEngine控件——XP换肤 ActionList——应用程序通用功能列表 OleContainer——OLE容器 将程序项设置到控制面板 艺术化排列桌面图标 Delphi中的ini文件的读写 建立键盘鼠标动作记录与回放 实现指定目录下的文件查询 实现对系统的操作监视 系统级热键的实现 检测NumLock、Insert、CapsLock、ScrollLock键的状态

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧