- 浏览: 24894 次
- 性别:
- 来自: 东莞
最新评论
-
flythink:
oledb是不是更容易弄一些? 纯猜测
MS ODBC for DMD 2.053 -
hqs7636:
8错,继续完善一下。。。
MS ODBC for DMD 2.053 -
rocex:
lz的这个工具好用,可以随时在1.x和2.x上切换。
DEx ...
D2/Phobos与D2/Tango一键切换编译环境设置 -
Colorful:
链接是这个 : http://code.google.com/ ...
Windows D编程类封装初步学习并请教 -
betty_betty2008:
哥们:链接打不开
Windows D编程类封装初步学习并请教
东拼西凑,终于在dmd2.053下成功连接上了ODBC 数据库(ACCESS)。代码还很不完善,慢慢再补。参数化查询函数(如bind)还没有,通过连接字符串和变量来组成查询语句进行查询是可以的,中文以及字段值为转义字符嵌套的字符串也支持。
所需的sql头文件来自D bindings--win32包。
已知问题:不建立DSN直接用字符串连接还不行,不知道是什么原因,个人XP下和公司WIN7下都试过,看来是非权限问题,不知API调用上有什么问题。有人知道的话,麻烦告诉俺,谢谢了。
类封装只有一个文件odbcutil.d,先看一段客户代码:
odbcutiltest.d
odbcutil.d
所需的sql头文件来自D bindings--win32包。
已知问题:不建立DSN直接用字符串连接还不行,不知道是什么原因,个人XP下和公司WIN7下都试过,看来是非权限问题,不知API调用上有什么问题。有人知道的话,麻烦告诉俺,谢谢了。
类封装只有一个文件odbcutil.d,先看一段客户代码:
odbcutiltest.d
module odbcutiltest; import std.stdio; import std.string; import std.conv; import odbcutil; int main() { Odbc odbc=new Odbc; //connect ODBC without setting up a DSN does not work at current. //odbc.connect("Driver= {Microsoft Access Driver(*.mdb)};DBQ=C:/Personnal/language/DLang/dbi_7zfromWeb/dbiallsamples/db1.mdb;"); //dsn :odbcartist;table :artists.mdb;user id="",passwd="" odbc.connect("odbcartist","",""); if(!odbc.isOpen) throw new Exception("ODBC connection failed.exit."); auto table=odbc.fetchAll("select * from artists"); foreach(row;table) { foreach(column;row) { writef("%s\t",column); } write("\n"); } writeln("Read table successfully."); writeln("Insert a new record..."); write("Please enter artist ID:"); string id=chomp(readln); write("Please enter artist Name:"); string name=chomp(readln); string sql="insert into artists values("~id~",'"~name~"');"; int changed=odbc.executeNonQuery(sql); writefln("%d row affected.",changed); writeln("Done"); readln; return 0; }
odbcutil.d
//Orignial c++ implementation DBUtil.h //By 小E QQ592646022 //ported by Sam Hu //at Donguan,2011-5-20 15:04 module odbcutil; import std.stdio; import std.string; import std.conv; import std.c.string; import std.array; import win32.sql; import win32.sqlext; import win32.sqltypes; class Odbc { private: SQLHANDLE hEnv; SQLHANDLE hDbc; SQLHANDLE hStmt; SQLRETURN retCode; SQLINTEGER retErro; SQLINTEGER row; SQLSMALLINT col; bool bState; char* pszUName; char* pszUPassword; char* pszDSN; public: this() { bState=false; //row=col=0; retCode=SQLAllocHandle(SQL_HANDLE_ENV,cast(SQLHANDLE)null,&hEnv); if((retCode!=SQL_SUCCESS)&& (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return; } retCode=SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,cast(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER); if((retCode!=SQL_SUCCESS)&& (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); SQLFreeHandle( SQL_HANDLE_DBC, hEnv ); return; } retCode=SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc); if((retCode!=SQL_SUCCESS)&& (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); SQLFreeHandle( SQL_HANDLE_DBC, hEnv ); return; } } ~this() { close(); } bool connect(string dsn,string username,string passwd) { if(bState==false) { retCode=SQLConnect(hDbc,cast(SQLCHAR*)dsn.ptr,SQL_NTS,cast(SQLCHAR*) username.ptr,SQL_NTS,cast(SQLCHAR*)passwd.ptr,SQL_NTS); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); SQLFreeHandle( SQL_HANDLE_DBC, hDbc ); return false; } retCode=SQLAllocHandle(SQL_HANDLE_STMT,hDbc,&hStmt); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); SQLDisconnect( hDbc ); SQLFreeHandle( SQL_HANDLE_DBC, hDbc); return false; } } bState=true; return true; } //@@@bug:connect ODBC without DSN failed ,but I don't know why.If anybody know about it, //@@@kindly let me know with thanks!!!! bool connect(string connectionString) { SQLCHAR connStrOut[256]; SQLSMALLINT connStrOutLen; if(bState==false) { retCode=SQLDriverConnect(hDbc, null, cast(SQLCHAR*)connectionString.ptr, SQL_NTS, cast(ubyte*)connStrOut, connStrOut.length, &connStrOutLen, SQL_DRIVER_COMPLETE); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); SQLFreeHandle( SQL_HANDLE_DBC, hDbc ); return false; } retCode=SQLAllocHandle(SQL_HANDLE_STMT,hDbc,&hStmt); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); SQLDisconnect( hDbc ); SQLFreeHandle( SQL_HANDLE_DBC, hDbc); return false; } } bState=true; return true; } /* string escape (string str) { char[] result; size_t count = 0; result.length = str.length * 2; for (size_t i = 0; i < str.length; i++) { switch (str[i]) { case '"': case '\'': case '\\': result[count++] = '\\'; break; default: break; } result[count++] = str[i]; } result.length = count; return std.conv.to!string(result); } */ int executeQuery(const char* pszSql) { if(pszSql is null ) return 0; writefln("hStmt=%s",cast(int)hStmt); retCode=SQLExecDirect(hStmt,cast(SQLCHAR*)pszSql,SQL_NTS); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return -1; } retCode=SQLNumResultCols(hStmt,&col); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return -1; } row=0; while(SQL_NO_DATA!=SQLFetch(hStmt)) { row++; } SQLCancel(hStmt); return rowCount; } int executeQuery(string sql) { return executeQuery(sql.ptr); } int executeNonQuery(const char* pszSql) { row=0; if(pszSql is null ) return 0; retCode=SQLExecDirect(hStmt,cast(SQLCHAR*)pszSql,SQL_NTS); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return -1; } retCode=SQLRowCount(hStmt,&row); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return -1; } retCode=SQLNumResultCols(hStmt,&col); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return -1; } SQLCancel(hStmt); return row; } int executeNonQuery(string sql) { return executeNonQuery(sql.ptr); } string[][] fetchAll(const char* pszSql) { string[][] v; if(pszSql is null ) return null; retCode=SQLExecDirect(hStmt,cast(SQLCHAR*)pszSql,SQL_NTS); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return null; } retCode=SQLNumResultCols(hStmt,&col); if((retCode != SQL_SUCCESS) && (retCode != SQL_SUCCESS_WITH_INFO)) { throw new Exception(format("Erro AllocHandle with retCode: %d",retCode)); return null; } row=0; SQLINTEGER colLen = 0; SQLSMALLINT buf_len = 0; SQLINTEGER colType = 0; while(true) { char sz_buf[256]; char* pszBuf; SQLINTEGER buflen; string[] rowData =new string[col+1]; if(SQLFetch(hStmt)==SQL_NO_DATA) { break; } for(int i=1;i<=colCount;i++) { SQLColAttribute(hStmt, cast(ushort)i, SQL_DESC_NAME, sz_buf.ptr, 256, &buf_len, cast(void*)0); SQLColAttribute(hStmt, cast(ushort)i, SQL_DESC_TYPE, cast(void*)0, 0, cast(short*)0, &colType); SQLColAttribute(hStmt, cast(ushort)i, SQL_DESC_LENGTH, null, 0, cast(short*)0, &colLen); pszBuf=(new char[colLen+1]).ptr; pszBuf[0]='\0'; SQLGetData(hStmt,cast(ushort)i,SQL_C_CHAR,pszBuf,50,cast(int*)&buflen); rowData[i-1]=to!string(pszBuf); } v~=rowData; row++; } SQLCancel(hStmt); return v; } string[][] fetchAll(string sql) { return fetchAll(sql.ptr); } bool close() { if(bState) { SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC,hDbc); SQLFreeHandle(SQL_HANDLE_ENV,hEnv); bState=false; } return true; } bool isOpen() { return bState; } int rowCount() { return row; } int colCount() { return col; } }
发表评论
-
D2 下win32 api 中文框架备忘
2011-07-28 17:49 1049隔一段时间就忘了怎么在D2下win32 SDK框架里使用中文, ... -
截屏、闪屏(Timer)、输入窗口--DFL for D2.053
2011-05-16 17:41 1277这个小练习用D2.053+DFL完成了以下功能: 1.截屏(C ... -
SDK写的一个画树(花)程序
2009-11-23 17:53 1081[img]C:\Documents and Settings\ ... -
json for D2.034
2009-10-13 19:54 722作者:Jeremie Pelletier 链接: [url] ... -
D2 中使用VC的Windows资源文件
2009-09-15 15:26 1232终于试成功了。总结一下: 一.在*.RC里包含window ... -
windows vfw.lib
2009-09-07 20:06 1347上传到这里,因为有时候改变工作地点后另一台机上没有。:P -
Windows D编程类封装初步学习并请教
2009-09-01 18:37 1236首先把要请教的问题写在最顶部: 1。事件最好的包装方法是怎样的 ... -
再学SQLite3 API
2009-08-21 17:48 2241这次进一步看了看SQLigte3 的API,不用上次写的类包装 ... -
"D"iving Into the D Programming Language
2009-08-04 16:23 1594"D"iving Into the D P ... -
练习:boost.timer 转D2
2009-07-21 12:32 1334中间解决了好几个问题,尚有几个问题没解决,已在NG上提问。备忘 ... -
Sqlite3 C++类库Sharplite 转D
2009-07-17 16:32 1672这是一份作业,因为所有创作的部分都是前人的。 材料:1.sql ... -
D2 反射和defineEum! 练习
2009-07-16 14:21 875备忘: module DioApp; imp ... -
D2 std.stream 文件读写小练习
2009-07-13 19:12 1788笔记要点: 1。个人工具包samsTools 工具之一Prom ... -
DFL for DMD2.031
2009-07-10 16:33 913从NG里要到的,俺测过了,OK 的啦. 原贴原下载地址链接: ... -
D2/Phobos与D2/Tango一键切换编译环境设置
2009-05-08 18:01 1174一。适合谁: 象俺一样,反反复复搭不起D编译环境的小菜 二。不 ... -
(翻译)Phobos 2.029 R部 std.random
2009-04-27 14:58 1334std.random ... -
(翻译)Phobos 2.029 P部 std.process
2009-04-23 11:57 1165std.process ... -
(翻译)Phobos 2.029 P部 std.path
2009-04-23 10:52 1322std.path ...
相关推荐
《DFL for DMD2.031:深入解析D语言源码与工具的整合应用》 DFL,全称为D Foundation Library,是为D语言(D Programming Language)设计的一个强大的开源库,它旨在提供一系列实用的、高效的、易于使用的模块,以...
D语言的最新版本DMD 2.065,带来了396处重要的修正和改进,充分展示了其持续演进和优化的决心。 在DMD 2.065的更新中,我们可以看到以下几个关键的知识点: 1. **错误修复**:作为编译器的核心功能,错误检测和...
DMD的版本dmd.2.026代表着这个编译器的一个特定迭代,它在开发过程中不断优化和增强,以适应D语言的发展和用户需求。 编译器是将高级编程语言转换为机器可执行代码的关键工具。DMD作为D语言的编译器,其源代码公开...
**DMD.2.042:D语言的官方编译器** DMD(Digital Mars D Compiler)是D语言的主要编译器,由沃德·坎宁安开发。版本2.042是这个编译器的一个特定更新,通常会包含性能改进、错误修复和新的语言特性的支持。对于...
用于控制sim显微镜中的dmd部分。 此代码可以控制dmd产生规则的图形。以控制显微镜光源形状
根据提供的文档信息,我们可以提取出以下有关DMD(Digital Micromirror Device)板的相关知识点,主要用于DLP(Digital Light Processing)技术,该技术是由TI(德州仪器)公司开发的。 首先,DMD板是DLP系统中的...
然后,定义DMD矩阵Ω为V_kΣ_k^1/2,DMD模式φ_i可以通过计算ΩU(:,i)获得,其中i=1,2,...,k。 5. **DMD频率和增益**:DMD频率ω_i可通过解复数特征值问题ΩΩ^Hλ=σ_i^2计算得出,对应于每个DMD模式的频率。DMD...
在这个“DMD.zip”压缩包中,包含的是一个关于DMD应用的具体实例,特别是与“DMD模态”和“特征值”相关的分析。 动态模态分解的核心思想是将高维时间序列数据分解为一系列简化的动态模式,这些模式代表了系统演化...
根据提供的文件信息,我们可以深入探讨数字微镜器件(DMD)的相关知识点,特别是关于DLP-0.45-WXGA型号的特点、应用以及技术规格。 ### 一、数字微镜器件(DMD)概述 数字微镜器件(Digital Micromirror Device,简称...
标题中的“dmd.rar_DMD”很可能指的是“Dot Matrix Display”(点阵显示器)的库文件,用于在Arduino平台上操作矩阵显示屏。这个压缩包可能包含了实现这种显示效果所需的代码和其他资源。 Arduino DMD库是专门为在...
Matlab 通过 JDBC 和 ODBC 连接 SQL Server 在本文中,我们将详细介绍 Matlab 通过 JDBC 和 ODBC 连接 SQL Server 的两种方法:程序设计方法和图形界面设计方法。 程序设计方法 程序设计方法是使用 Matlab 的 ...
在压缩包"**DMD.zip**"中,可能包含了与DMD编程相关的软件工具、库文件、示例代码或文档,它们可以帮助开发者更好地理解和实现DMD的相关设置。通过深入学习这些资料,开发者可以熟练掌握DMD编程技巧,从而在实际项目...
DMD2,全称 Digital Mars D Compiler,是D语言的主要编译器之一,由Walter Bright创建并维护。DMD2源码包含了编译器的实现细节,对于想要深入理解D语言、编译原理或者对编译器开发感兴趣的开发者来说,这是一个宝贵...
Hi3798CV2DMD是该系列硬件的一个特定版本,其硬件开发资料是开发者进行产品设计和系统集成的重要参考资料。 首先,硬件开发资料通常包括原理图和PCB设计两大部分。原理图是电路设计的基础,它清晰地展示了各个元...
2. "Simpler_DMD_Function_Usage.m":这是一个更简单的DMD用例,可能是为了教学或演示目的,展示了如何调用"DMD_rom.m"中的功能来分析数据。 3. "VelocityFieldData.mat":这是一个MATLAB数据文件,很可能包含了非定...
该资源提供的版本为1.0.1-beta1,与D编译器DMD 2.093.0和LDC 1.22.0兼容。在D语言的开发领域,Visual D以其用户友好的界面和强大的功能,深受开发者喜爱。 首先,Visual D的核心优势在于其对D语言的深度支持。它...
2. SLOAN-INVESTORSII.xls:Sloan可能是指麻省理工学院斯隆管理学院,此文件可能涉及到投资者分析或者投资组合管理,帮助投资者评估投资策略,理解风险与回报的关系,进行有效的资产配置。 3. CASTRBDG.xls:可能是...
动态模式分解的matlab 代码,有注释
2. 在Arduino IDE中编写程序,首先包含库头文件,例如`#include <RGB_DMD.h>`。 3. 初始化显示对象,根据你的硬件连接设置参数,例如`RGB_DMD display(32, 16);`。 4. 使用库提供的函数来绘制图像或文本,如`display...
在本资源"POD_DMD-master.zip"中,包含的是一套针对CFD数据进行处理和分析的方法,主要涉及两种关键的技术:主成分分析(PCA,Principal Component Analysis)也称为POD( Proper Orthogonal Decomposition)和动态...