用Delphi进行数据库之间转换
delphi 数据库布尔型字段

一、概述在Delphi编程中,数据库的操作是非常常见的,而布尔型字段作为数据库表中的一种常见数据类型,其在Delphi中的处理也是非常重要的。
本文将就Delphi中数据库布尔型字段的使用进行深入探讨。
二、数据库中的布尔型字段数据库中的布尔型字段通常用来表示真假、是非等逻辑值,其在不同的数据库系统中可能会有不同的表示方法。
在常见的关系型数据库中,布尔型字段通常以1和0来表示,或者以特定的字符串表示(比如"true"和"false")。
在Delphi中,我们需要了解数据库系统对布尔型字段的具体表示方法,以便正确地读取和修改布尔型字段的值。
三、Delphi中的数据访问组件Delphi提供了丰富的数据访问组件,包括对各种数据库系统的支持。
在处理数据库布尔型字段时,我们通常会用到TDataSet、TDataSource等组件,通过这些组件我们可以方便地读取和修改数据库中的布尔型字段,同时可以实现数据绑定和显示。
四、程序中的布尔型字段处理在Delphi编程中,我们常常需要处理从数据库中读取的布尔型字段,比如在界面上显示布尔型字段的值,或者根据布尔型字段的值来控制程序的逻辑。
在这种情况下,我们需要了解如何将数据库中的布尔型字段转换为Delphi程序中的布尔型变量,以及如何将程序中的布尔型变量保存到数据库中的布尔型字段。
五、布尔型字段的条件查询在数据库查询中,布尔型字段的条件查询是非常常见的操作,我们可能需要根据布尔型字段的值来过滤数据,或者根据布尔型字段的值来进行排序。
在Delphi中,我们可以通过SQL语句或者数据集过滤来实现布尔型字段的条件查询,同时也可以使用TQuery、TTable等组件来实现更加灵活和复杂的条件查询操作。
六、布尔型字段的更新和插入除了读取和查询,我们在实际的开发过程中还会经常遇到更新和插入布尔型字段的操作。
在Delphi中,我们可以通过数据集、SQL语句或者数据控件来实现对布尔型字段的更新和插入,需要注意的是不同的数据库系统可能对布尔型字段的更新和插入操作有不同的要求,我们需要根据具体的数据库系统来正确地处理布尔型字段的更新和插入。
在Delphi中实现异构数据库转换

( .i in oao a &T cnc o ee J j n 30 0 h a2 N n hn nvr t, acag30 2 , hn ) 1 J j gV ct nl ehia C l g , i i g320 ,C i ;. acagU i sy N n hn 3 0 9 C ia ua i l l ua n ei
c n e in a tmaial sn e p i S d t o t lc mp n n s o v r o u o tcly u ig D l h ’ aa c n r o o e t . s o Ke r s h tr g n o s d tb s ;d t o v ri n y wo d : e eo e e u aa a e a ac n e o ;D l h ;B s ep i DE
维普资讯
20 07年第 4期
文章编号 : 0 - 7 (0 7 0 -060 1 62 5 2 0 )40 6 -3 0 4
计 算 机 与 现 代 化 J U N IY IN AHU I A J U XA D I A S
总第 10期 4
在 D lh 中实现 异构 数 据 库 转换 e i p
已经 改变 。 因此要将 数据 进行转换 , 另一系 统或新 供 的系统使 用 。
由于 Vsa F x r i l oP o与 S LS re 均 为 Mi oo u Q e r v c sf r t
公 司产 品 , 在这两 者之 间进行 数据 转换 相对 比较容 故 易 。Mcoot 供 了专 门 的转 换 工 具 即 Vsa Fx i sf提 r i l o— u
的问题 。
下 面讨论 几种 常见 的数据转 换方 法 。
DELPHI将EXCEL数据导入到数据库中源码

DELPHI将EXCEL数据导入到数据库中源码以下是一个使用DELPHI将EXCEL数据导入到数据库的示例源码:```pascalunit Unit1;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,Vcl.StdCtrls,Data.Win.ADODB,Vcl.Grids,Vcl.DBGrids,Vcl.ExtCtrls,Excel97,ActiveX;typeTForm1 = class(TForm)Label1: TLabel;Button1: TButton;DataSource1: TDataSource;DBGrid1: TDBGrid;procedure Button1Click(Sender: TObject);procedure FormCreate(Sender: TObject);private{ Private declarations }procedure ImportExcelData(const AFileName, ASheetName: string);public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);varOpenFileDialog: TOpenDialog;beginOpenFileDialog := TOpenDialog.Create(nil);tryOpenFileDialog.Filter := 'Excel Files (*.xls, *.xlsx),*.xls;*.xlsx';if OpenFileDialog.Execute thenbeginImportExcelData(OpenFileDialog.FileName, 'Sheet1');ShowMessage('Data imported successfully!');end;finallyOpenFileDialog.Free;end;end;procedure TForm1.FormCreate(Sender: TObject);beginDataSource1.DataSet := ADOQuery1;end;procedure TForm1.ImportExcelData(const AFileName, ASheetName: string);varExcelApp: TExcelApplication;Workbook: TExcelWorkbook;Worksheet: TExcelWorksheet;Range: Variant;I, J, StartRow, LastRow, StartColumn, LastColumn: Integer;FieldNames: TStringList;FieldValues: TStringList;beginExcelApp := TExcelApplication.Create(nil);tryExcelApp.Connect;Workbook := ExcelApp.Workbooks.Open(AFileName);Worksheet := Workbook.Sheets.Item[ASheetName] as TExcelWorksheet;Range := edRange;StartRow := Range.Row;LastRow := Range.Row + Range.Rows.Count - 1;StartColumn := Range.Column;LastColumn := Range.Column + Range.Columns.Count - 1;FieldNames := TStringList.Create;FieldValues := TStringList.Create;tryfor J := StartColumn to LastColumn dobeginFieldNames.Add(VarToStr(Worksheet.Cells[StartRow, J].Value));end;for I := StartRow + 1 to LastRow dobeginFieldValues.Clear;for J := StartColumn to LastColumn dobeginFieldValues.Add(VarToStr(Worksheet.Cells[I, J].Value)); end;//将数据插入数据库中ADOQuery1.ExecSQL;end;finallyFieldNames.Free;FieldValues.Free;end;Workbook.Close;finallyExcelApp.Disconnect;ExcelApp.Free;end;end;end.```上述示例中,需要使用到 `TExcelApplication` 和`TExcelWorkbook` 组件,这需要引入 `Excel97` 单元。
基于Delphi7和SQL SERVER 2000的MARC转换设计与实现

Yulin, Guangxi 537000 )
Abstr act: In consideration of the bibliographic dat a with MARC form applied in the library system widely, this article analyzes the structure of MARC data, leads MAR C data in SQ L Server 2000 database through Delphi 7 successfully. It makes MARC data become an open dat abase format, thus making it possible to exploit W EB and to be transformed into ot her data f在一条MAR C记录中,语言定义并组织为内
部结构和格式,难以有效进行机器支持的检索、处
理和交换,难以进行跨文献单元、数据类型和系统
范围的信息挖掘、转换,也难以与其他领域的数据 格式或数据处理系统互操作. 本文仅就如何借助于 Delphi和SQ L SER VER 2000系统开发环境,实现对 MAR C记录任意字段进行读以及转化成其它数据格 式作一些探讨.
K ey wor ds: library;MARC;SQ L Server 2000
M
AR C(Machine Readable Catalog机器可读 目录),它作为目前国际上普遍采用的书 目数据格式,在各图书馆管理系统中现已
被普遍采用,促进了图书馆书目数据的规范化、统
一化. 但MARC严重缺乏开放性,各类信息在具体
记录头标:位于MAR C记录的首部,其长度均
将DELPHI中把数据库中数据导出到EXCEL中

将DELPHI中把数据库中数据导出到EXCEL中使用Delphi 控件方法在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。
1)打开ExcelExcelApplication1.Connect;2) 显示当前窗口:ExcelApplication1.Visible[0]:=True;3) 更改Excel 标题栏:ExcelApplication1.Caption := '应用程序调用Microsoft Excel';4) 添加新工作簿:ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));5) 添加新工作表:var Temp_Worksheet: _WorkSheet;beginTemp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);End;6) 打开已存在的工作簿:ExcelApplication1.Workbooks.Open (c:\a.xlsEmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)7) 设置第2个工作表为活动工作表:ExcelApplication1.WorkSheets[2].Activate; 或ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;8) 给单元格赋值:ExcelApplication1.Cells[1,4].V alue := '第一行第四列';9) 设置指定列的宽度(单位:字符个数),以第一列为例:ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米11) 在第8行之前插入分页符:ExcelApplication1.WorkSheets[1].Rows[8].PageBreak := 1;12) 在第8列之前删除分页符:ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;13) 指定边框线宽度:ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;1-左2-右3-顶4-底5-斜( \ ) 6-斜( / )14) 清除第一行第四列单元格公式:ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;15) 设置第一行字体属性:ExcelApplication1.ActiveSheet.Rows[1] := '隶书';ExcelApplication1.ActiveSheet.Rows[1].Font.Color := clBlue;ExcelApplication1.ActiveSheet.Rows[1].Font.Bold := True;ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;16) 进行页面设置:a.页眉:ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';b.页脚:ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&P页';c.页眉到顶端边距2cm:ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;d.页脚到底端边距3cm:ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;e.顶边距2cm:ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;f.底边距2cm:ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;g.左边距2cm:ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;h.右边距2cm:ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;i.页面水平居中:ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;j.页面垂直居中:ExcelApplication1.ActiveSheet.PageSetup.CenterV ertically := 2/0.035;k.打印单元格网线:ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;17) 拷贝操作:a.拷贝整个工作表:ed.Range.Copy;b.拷贝指定区域:ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;c.从A1位置开始粘贴:ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;d.从文件尾部开始粘贴:ExcelApplication1.ActiveSheet.Range.PasteSpecial;18) 插入一行或一列:a. ExcelApplication1.ActiveSheet.Rows[2].Insert;b. ExcelApplication1.ActiveSheet.Columns[1].Insert;19) 删除一行或一列:a. ExcelApplication1.ActiveSheet.Rows[2].Delete;b. ExcelApplication1.ActiveSheet.Columns[1].Delete;20) 打印预览工作表:ExcelApplication1.ActiveSheet.PrintPreview;21) 打印输出工作表:ExcelApplication1.ActiveSheet.PrintOut;22) 工作表保存:if not ExcelApplication1.ActiveWorkBook.Saved thenExcelApplication1.ActiveSheet.PrintPreview;23) 工作表另存为:ExcelApplication1.SaveAs( 'C:\Excel\Demo1.xls' );24) 放弃存盘:ExcelApplication1.ActiveWorkBook.Saved := True;25) 关闭工作簿:ExcelApplication1.WorkBooks.Close;26) 退出Excel:ExcelApplication1.Quit;ExcelApplication1.Disconnect;Top2 楼songlian(雨)回复于2005-04-29 16:37:15 得分0把数据集导如导excel,adsdata可以换成任意你用导的数据集WriteExcel(AdsData:Tclientdataset; sName, Title: string);varExcelApplication1: TExcelApplication;ExcelWorksheet1: TExcelWorksheet;ExcelWorkbook1: TExcelWorkbook;i, j: integer;filename: string;beginfilename := concat(sName, '.xls');tryExcelApplication1 := TExcelApplication.Create(Application);ExcelWorksheet1 := TExcelWorksheet.Create(Application);ExcelWorkbook1 := TExcelWorkbook.Create(Application);ExcelApplication1.Connect;exceptApplication.Messagebox('Excel没有安装!','Hello',MB_ICONERROR + mb_Ok);Abort;end;tryExcelApplication1.Workbooks.Add(EmptyParam, 0);ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);AdsData.First;for j := 0 to AdsData.Fields.Count - 1 dobeginExcelWorksheet1.Cells.item[3, j + 1] := AdsData.Fields[j].DisplayLabel;ExcelWorksheet1.Cells.item[3, j + 1].font.size :='10';end;for i := 4 to AdsData.RecordCount + 3 dobeginfor j := 0 to AdsData.Fields.Count - 1 dobeginExcelWorksheet1.Cells.item[i, j + 1] :=AdsData.Fields[j].Asstring;ExcelWorksheet1.Cells.item[i, j + 1].font.size := '10';end;AdsData.Next;end;ExcelWorksheet1.Columns.AutoFit;ExcelWorksheet1.Cells.item[1, 2] := Title;ExcelWorksheet1.Cells.Item[1, 2].font.size :='14';ExcelWorksheet1.SaveAs(filename);Application.Messagebox(pchar('数据成功导出'+ filename),'信息化建设部',mb_Ok);finallyExcelApplication1.Disconnect;ExcelApplication1.Quit;ExcelApplication1.Free;ExcelWorksheet1.Free;ExcelWorkbook1.Free;end;end;。
DELPHI程序进行mysql建数据库和备份及回复处理

DELPHI程序进⾏mysql建数据库和备份及回复处理//备份数据库过程procedure TfrmInstall.doExportDataBase;varscmd: String;iret: Cardinal;begintryscmd := SysUtils.Format(' mysqldump -h%s -P %s -u%s -p%s -B %s > %s',[Self.edtIp.Text, Self.edtPort.Text, Self.edtUser.Text,Self.edtPassword.Text, Self.edtDataBase.Text, Self.edtFile.Text]);iret := ShellExecute(Self.Handle, 'open', 'cmd.exe', pchar('/c ' + scmd),pchar(''), SW_HIDE);if iret < 32 thenbegin// showmessage('ret = ' + IntToStr(iret));raise Exception.Create('导⼊脚本不合法');end;ShowMessage('备份数据库成功');excepton E: Exception dobeginShowMessage('导⼊数据库失败,错误原因:' + E.Message);exit;end;end;end;//创建数据库及导⼊过程procedure TfrmInstall.doImportMysql;varslist: TStrings;stmp, scmd: String;iret: Cardinal;beginif Self.SQLConnection1.Connected thenSelf.SQLConnection1.Close;Self.SQLConnection1.Params.Clear;Self.SQLConnection1.Params.Append('DriverName=MySQL');Self.SQLConnection1.Params.Append(SysUtils.Format('HostName=%s',[Self.edtIp.Text]));Self.SQLConnection1.Params.Append(SysUtils.Format('Database=%s', ['mysql']));Self.SQLConnection1.Params.Append(SysUtils.Format('User_Name=%s',[Self.edtUser.Text]));Self.SQLConnection1.Params.Append(SysUtils.Format('Password=%s',[Self.edtPassword.Text]));Self.SQLConnection1.Params.Append(SysUtils.Format('DriverName=MySQL', []));Self.SQLConnection1.Params.Append(SysUtils.Format('DriverName=MySQL', []));Self.SQLConnection1.Params.Append('ServerCharSet=');Self.SQLConnection1.Params.Append('BlobSize=-1');Self.SQLConnection1.Params.Append('ErrorResourceFile=');Self.SQLConnection1.Params.Append('LocaleCode=0000');Self.SQLConnection1.Params.Append('Compressed=False');Self.SQLConnection1.Params.Append('Encrypted=False');Self.SQLConnection1.Params.Append('ConnectTimeout=60');trySelf.SQLConnection1.Connected := true;excepton E: Exception dobeginShowMessage('连接失败,错误原因:' + E.Message);exit;end;end;stmp := SysUtils.Format('create database %s', [Self.edtDataBase.Text]); trySelf.SQLConnection1.ExecuteDirect(stmp);excepton E: Exception dobeginif pos('database exists', E.Message) < 0 thenbeginShowMessage('创建数据库失败,错误原因:' + E.Message);exit;end;end;end;if not FileExists(Self.edtFile.Text) thenraise Exception.Create('待导⼊的⽂件不存在');trytryscmd := SysUtils.Format(' mysql -h%s -P %s -u%s -p%s -B %s < %s', [Self.edtIp.Text, Self.edtPort.Text, Self.edtUser.Text,Self.edtPassword.Text, Self.edtDataBase.Text, Self.edtFile.Text]);iret := ShellExecute(Self.Handle, 'open', 'cmd.exe', pchar('/c ' + scmd),pchar(''), SW_HIDE);if iret < 32 thenbegin// showmessage('ret = ' + IntToStr(iret));raise Exception.Create('导⼊脚本不合法');end;ShowMessage('数据库备份回复成功');excepton E: Exception dobeginShowMessage('导⼊数据库失败,错误原因:' + E.Message);exit;end;end;finallyFreeAndNil(slist);end;end;。
Delphi+SQL数据转换技术浅析

S L数 据库 中的数据按 客户需要 的格式 导人到 Q
E cl xe 中就成 了一个迫 切 的问题 .尤其是 如何 实时
实 际上,针对 不同数据 的转换 问题
就 S LSre Q vr e
20 的 D S 00 T 来说,它提供了功能强大的技术支撑 , 可以将一种数据库 系统中定义的模型转化为另一 种数据库 中的模型, 这样用户就可 以利用 自己熟悉
l 0
‘ 一
钮, 打开 已经建好了的 E cl xe模板 , 单击 ‘ 插入数 据 ’按钮 ,就可 以看到数据在一条一条的插入到 E c1 , xe 中 一旦 当前 set 满 时会 自动 插到下 一个 he插 set , he 中 数据 成 功插入后 会提 示“ 入成功 ” 插 . 2 2 方 案三的具 体设计 .
OnDep i n QL DaaC n eso c n lg lh dS t o v rinTeh oo y a
LUO i Ja—g o , XU n , KONG n u‘ Lib Lig一】n 【 c i
(iIx U i rt f c neadTc nlg,a Jagi nv syo i c n ehooy .Den so i ;b aut f cn mc n ngr l c ne l ei Se a ’ fc e .F cl o oo i a dMaae a S i c ; y E s i e
文章 编号 :0 7—12 (0 6 0 0 6 10 2 9 2 0 )6— 0 0—0 3
D lh + Q e i S L数据转换技术浅 析 p
罗 家国 ‘ ,许 菱 ,孔 令新 。
( 江西理工大学 a .教务处 ; .经济管理学院 ;C b .理学院 。 江西 赣州 。4 00) 310
delphi 连接sqlite数据库的详细方法

delphi 连接sqlite数据库的详细方法Delphi连接SQLite数据库的详细方法Delphi是一种功能强大的集成开发环境(IDE),可以用于开发各种类型的应用程序,包括数据库应用程序。
在Delphi中,我们可以使用SQLite 数据库来储存和管理数据。
本文将介绍如何使用Delphi连接SQLite数据库并进行基本的数据操作。
下面是连接SQLite数据库的详细步骤:步骤1:准备工作首先,我们需要准备一些必要的工具和文件:1. Delphi IDE - 在电脑上安装并启动Delphi集成开发环境。
你可以从Embarcadero官方网站上下载Delphi的最新版本。
2. SQLite数据库文件- 从SQLite官方网站上下载并安装SQLite数据库,然后创建一个SQLite数据库文件(例如MyDatabase.db)。
3. Delphi SQLite组件- 在Delphi IDE中安装并配置SQLite连接组件。
你可以从第三方提供商(如ZeosLib,UniDAC等)或释放的Delphi版本中找到这些组件。
步骤2:创建Delphi项目在Delphi IDE中创建一个新项目。
选择“File”菜单中的“New”选项,并选择“VCL Forms Application”模板。
为项目指定一个合适的名称并保存。
步骤3:添加SQLite连接组件在项目中添加SQLite连接组件。
你可以通过菜单栏上的“Component”-> “Install Component”选项或直接通过命令窗口(Ctrl + Alt + C)安装组件。
确保已正确安装组件,并在IDE的面板上找到它们。
步骤4:设计用户界面在Delphi IDE的窗体设计器中设计用户界面。
你可以使用标签、编辑框、按钮等控件来构建一个简单的界面,用于展示数据库中的数据或进行数据操作。
步骤5:连接SQLite数据库在窗体的代码编辑器中,添加以下代码来连接SQLite数据库:uses添加SQLite组件的单元SQLiteTable3;vardb: TSQLiteDatabase;将以上代码添加到窗体的私有变量声明部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用Delphi进行数据库之间转换 在实际应用中,可能会遇到将一种数据库转为另一种数据库的情况,而Delphi可以完成这种功能。
尤其是需要将以前的dbase数据库结构及内容转换成其它数据库结构时,采用此方法简单、快速且安全。
Delphi是一种Windows应用程序开发软件。
它速度快,具有强大且容易使用的可视化开发环境,并采用了具有弹性和可重用的完整的面向对象程序语言。
由于以上的这些特点,Delphi可以让我们快速地建立起主从结构的应用程序,可产生单一可执行文件与动态链接库以及从单机、网络到主从结构的应用程序。
使用Delhpi可以方便而快速地建立强大的数据库应用程序,可以和Paradox、dbase、Lo cal InterBase Server、Foxpro及ODBC数据源等多种桌面型数据库直接配合使用。
数据库转换方法 1.所使用的控件 2.TBatchMove控件的使用 TBatchMove允许在一组记录或是整个数据表中执行特种作业,这个控件的主要用途在于把数据从服务器中卸到本地的数据源供分析或进行其他操作。
TBatchMove可以在目的地建立对应于原数据表内容的数据表,自动将列名及数据类型进行适当的对应操作。
TBatchMove两个特性指明批量移动(Batch Move)操作的源表及目的表。
Source指定一个对应于已有的源数据表的数据集(一个Tquery或Ttable控件),Destination指明对应于一个数据库数据表的Ttable控件,目的数据表可以是已经存在的也可以是不存在的。
Mode特性指明TBatchMove对象所要做的事情: 我们可以根据batCopy模式,对数据库类型进行适当的转换,以下是从dBASE类型到其它类型之间的转换结果: 数据库转换举例 现有用Foxbase开发的财务程序中的会计科目数据库(kjkmk.dbf),系统将升级到Window s环境下开发,数据库将采用Paradox语言。
为了沿用该库结构和数据,可采用如下方法进行转换。
1.Datasource1控件: AutoEdit True DataSet Table1 Enabled True Name DataSorce1 2.Table1控件: DatabaseName cw Name Table1 Readonly False TableName KJKMK TableType udBase Datasource1控件和Table1控件共同定义被转换的源文件,该文件是在别名为cw里的kjk mk,文件类型为Dbase。
3.BatchMove1控件: Destination Table2 Mode balCopy Name BatchMove1 Sorce Table1 MatchMovel控件定义转换类型为Copy以及源文件、目标文件。
4.Datasource2控件: AutoEdit True DataSet Table2 Enabled True Name DataSorce2 .Table2控件: DatabaseName cwdb Name Table2 Readonly False TableName KJKMK TableType uParadox Datasource2控件和Table2控件共同定义转换后的目标文件,该文件是在别名为cwdb里的 kjkmk,文件类型为Paradox。
6.DbGrid1控件: Datasorce Datasorce1 Name DbGridl DbGridl网格控件先定义源文件,执行转换后再定义目标文件,主要用于方便查看。
7.Button1控件: OnClck ButtonClck OndragDrop Ondragover OnEnddrag 该控件有一个OnClick事件,表示执行文件类型转换。
其代码如下: procedure TForm1.Button1Click(Sender:TObject); begin BatchMove1.execute; end; 经上述方法定义,编译执行后,即可将kjkmk.dbf文件转换成kjkmk.db文件,然后就可以用 Database Desktop工具对其进行修改调整。
用此方法还可进行其它任意文件的转换。
ODBC中的同步与异步执行模式 1.引言 近年来,随着计算机局域网技术的不断发展,计算机体系结构已经发展到复杂而开放的客户机/服务器模式。
对于客户机/服务器应用的开发,现在常用的前端开发工具有:VisualBasic、Delphi、PowerBuilder等。
它们可通过ODBC接口访问服务器的SQLServer数据库服务器。
VisualBasic、Delphi、PowerBuilder等开发工具在使用ODBC2.0来编写程序时,通常会提供三种方法来进行数据库应用程序的方案设计:・使用数据控制项・使用数据库对象变量进行编程・直接调用ODBC2.0API 在客户机/服务器模式下进行数据库应用程序设计时,仅用前两种方法往往是不够的。
因为采用前两种方法,其执行模式对于程序员是透明的,而ODBC2.0访问数据库时存在同步与异步执行模式之分,故容易因设计不当,发生系统死锁。
因此,在实际编程序时,我们需要采用第三种方法来解决由同步和异步执行模式所造成的问题。
2.同步和异步执行模式ODBC2.0访问数据库时,有同步执行模式与异步执行模式之分。
所谓同步执行模式,是指语句在同步执行模式下,将始终保持对程序流的控制,直至程序结束。
例如查询操作,客户机上的应用程序在向服务器发出查询操作的指令后,将一直等待服务器将查询结果返回客户机端后,才继续进行下一步操作,如图1所示。
图1同步执行模式 所谓异步执行模式,是指语句在异步执行模式下,各语句执行结束的顺序与语句执行开始的顺序并不一定相同。
例如查询操作,客户机上的应用程序在向服务器发出了查询操作的指令后,将立刻执行查询语句的下一条语句,而不需要等到服务器将查询结果返回客户机端后,才继续进行下一步操作。
如图2所示。
图2异步执行模式 在一些应用程序开发工具中,在其提供使用数据控制项和数据库对象变量进行编程的同时,并没有很好地考虑到同步执行模式与异步执行模式的重要区别。
为了使程序运行速度更快,其语句执行的缺省模式为异步模式。
对于一般程序员来说,如果他对同步执行模式与异步执行模式不了解的话,他往往会在对服务器发出一个操作语句(查询或读取一条记录等操作)后,立刻引用服务器返回的执行结果,或者对该结果进行下一步操作;在异步执行模式下,客户机上的后续语句是在该操作语句发出后接着执行的,但由于各种原因,服务器不一定能执行完该操作语句,并在后续语句执行前将结果返回客户机。
因此,后续语句在引用前一操作语句的执行结果时,往往会因为该执行结果并不存在而引用了错误的值,造成系统错误或死锁。
3.解决方案 解决上面所提到的问题,可以采取以下两种方案:①利用ODBC2.0API,将语句执行状态设置为同步执行模式。
ODBC2.0API中,函数SQLSetStmtOption()的功能是设置同步或异步执行模式。
我们可以采用以下语句,将语句执行状态设置为同步执行模式:iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-EN2ABLE,0)其中,hStmt是一有效的语句句柄,常数SQL-ASYNC-ENABLE是所要设置的选项,参数0表示该选项(即异步执行模式)关闭。
如果iRetCode返回SQL-SUCCESS,则表示语句执行状态已被设置为同步执行模式。
②利用ODBC2.0API,将语句执行状态设置为异步执行模式,然后在程序中不断查询一个操作语句是否已经执行完毕。
ODBC2.0API中共有20多个函数支持异步执行,如上页表所示。
这些函数第一次调用后,将返回值SQL-STILL-EXE2CUTING,这时应用程序将继续执行后续语句。
过了一段时间后,应该再次调用原函数,而且要注意:实参数应传入与第一次调用时相同的语句句柄,其他参数也应一样(但会被忽略)。
如果函数返回值为SQL-SUCCESS,则表明该语句已经执行完毕;如果函数返回SQL-STILL-EXECUTING,则表明该语句仍在执行中。
我们可以用一个简单的例子说明如下:iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-ENABLE,1)′置语句执行模式为异步执行模式iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)......′执行其他操作iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)′判断SQLExecDirect()是否已执行完毕If(iRetCodeΚSQL-STILL-EXECUTING)Then......′该语句未执行完,继续执行其他操作ElseIf(iRetCodeΚSQL-SUCCESS)Then......′该语句已执行完,可对语句操作结果进行处理EndIfEndIf同步执行模式可以简化程序编制的复杂性,对ODBC2.0API不十分熟悉的程序员,可以不用过多地了解比较复杂的ODBC2.0API,而只需使用数据控制项和数据库对象变量来编写应用程序,使开发效率大大提高,但程序运行速度比不上异步执行模式的速度。
异步执行模式虽然在编程序时十分复杂,但在这种模式下可以进行多任务并行执行,使执行效率大大提高。
我们在编制应用程序时,应根据自身的情况,对这两种模式的使用进行划分,以便既提高程序运行的安全可靠性,又提高程序执行的效率。
Delphi数据库应用程序开发中图像数据的存取技术 Delphi提供了数据访问(DataAccess)和数据控制(DataControls)的可视化控件,能够方便快捷地产生具有良好界面且功能强大的数据库应用程序。
对于涉及图像数据(含Graphic字段)的数据库应用程序,如人事管理信息系统等,图像数据的存取技术是一个关键。
然而,有关Delphi下图象的存取,特别是图像的保存方面的技术各种资料上很少提及。
下面,笔者结合一个简单的例子来说明。
一、图像数据的保存 1.创建一个含有Graphic字段的数据库列表。
在WindowsISQ(或Databasedesktop)下createdatabasemydb.gdbcreatetablemyfrieds(namevarchar(15)notnull,telephonevarchar(12),addressvarchar(30),zipvarchar(8),picturevarchar(15),imageblob); 其中,picture字段用于保存图像的名称(包括路径),image(Graphic字符)则用于存储图像,其数据类型为“blob”。