Ⅰ delphi如何连接oracle数据库
Delphi作为强大的数据库前端开发工具,提供了很多数据库存取方式的封装控件。对于Oracle的数据存取控件,不管何种数据库引擎,一般都会封装一个Connection作为数据集的连接控件,因此只要设定Connection的相关属性即可,其它dataset控件,如query,table等只要指定此Connection即可,客户端应用程序要连接到Oracle的Schema,一般都需要安装Oracle Client,并使用Net Manager设置客户端可以访问的Oracle Database Server的主机名称及存取协议、Port等信息。可以使用以下的方式连接
dbExpress:dbExpress比较适合连接sql的数据库,据说效率挺高的。放置一个dbExpress页签下的SQLConnection,在此控件上点击鼠标右键,选择“Edit Connection Properities”功能,并依下图设置即可。其中Database栏位要设置为Oracle Client中设置的服务名,如果需要记住密码,而不用每次连接的时候输入密码,请将 LoginPrompt属性设置为False,设置OK后即可测试将Connected:=True看看是否成功,其它数据处理控件请选择相应dbExpress页签下的控件即可。
不使用控件,比如使用原生的ADO组件,不太建议这种方法,既然Delphi已经做了封装,何必又要回到原始状态呢。以上连接方法都需要安装Oracle Client软件,但是Oracle官方的Client太过庞大,安装非常不便,目前网上有人发布一个精简版的Oracle Client软件,比较小,可以满足连接Oracle的需要,可以去下载这个软件,而不用去安装复杂的官方版本。
下载ODAC控件,此控件不需要安装Oracle Client,而是使用OCI的方式透过TCP/IP协议直接连接到Oracle Server,可以将程序做成瘦客户端,程序分发的时候比较方便。此控件支持Delphi的大部分版本以及C++Builder以及kylix以及.net,而且提供源代码,有兴趣的可以研究一下。具体安装使用方法请参考控件的相关说明以及帮助文档。
Ⅱ Delphi如何生成xml文件
“ADOQuery.SaveFile()就可以了
保存的文件名后缀为.xml,程序会自动判断”
真的改了后缀名就可以存成Xml文件了吗?在下真没用过,受教了。
你可以根据数据库中的表定义好数据格式,然后利用IXmlDocument接口创建数据,最后再保存成文件就OK了
procere CreateXML();
var
ixd: IXmlDocument;
root: IXmlNode;
node: IXmlNode;
begin
ixd := NewXmlDocument();
try
ixd.Encoding := 'UTF-8';
root := ixd.AddChild('Datas');
node := root.AddChild('Data');
node.Attributes['id'] := 1;
node.Attributes['level'] := '1';
node.Text := 'HAHA';
ixd.SaveToFile('Abc.xml');
finally
ixd := nil;
end;
end;
Ⅲ delphi中如何将XML保存到数据库中 读出 并且可以保存的数据读出保存到XML中
[delphi中如何将XML保存到数据库中?]这要看你要保存到数据库的XML规范文件,而规范文件又分简单和复杂的,可以根据数据库管理员提供的标准XML,做XML文本文件。XML的每一行中每一个节点哪些可以更改,哪些不能更改。。。如Dim sRoot As MSXML2.IXMLDOMElement ,sRoot.setAttribute "COMPATIBLE_REV", "" 你要需要看XML的编写方法的书籍,电脑装个接口引擎,再调传网数据。。。。。。 我自己以前刚做这些也用了好几天才搞定。 例子我用VB写的,只说明如何定义IXMLDOMElement,怎样做节点。
Ⅳ Delphi中点击button要将DBEdit中的新纪录写入数据库代码是什么
uses中加入DB;
if (DBEdit1.DataSource.DataSet.State = dsinsert) or (DBEdit1.DataSource.DataSet.State = dsEdit) then
DBEdit1.DataSource.DataSet.Post ;
DBEdit1.DataSource.DataSet可以换成DBEdit1所关联的ADOQuery或者ADOTable
如:
if (ADOQuery1.State = dsInsert) or (ADOQuery1.State = dsEdit) then
ADOQuery1.Post ;
state = dsInsert说明数据集为插入新数据待保存状态
state = dsEdit说明数据集为编辑数据待保存状态
Post函数为向数据库提交修改或者新增加的数据。
Ⅳ 哪位大虾知道" .xrp " 文件, 哪种软件可以打开
Delphi 6 含有许多更新更强的XML支持功能,增加了XML文件编程,XML数据绑定向导,XML映象和BizSnap(SOAP/XML Web服务)。本文是三篇论述Delphi 6中XML功能系列文章的第三篇,也是最后一篇,论述Delphi 6中的XML映象工具,也称之为XML映象器(XML Mapper)。
XML映象器
可以单独打开或者在IDE的工具(Tools)菜单中打开映象器(XML Mapper)。这个工具将XML文件影射为类似于数据库中的数据集(DataSet)!在前二篇文章中,我们都使用TXMLDocument组件来处理 XML文件或XML绑定的数据。现在,我们不再使用TXMLDocument组件了。我们用XML映象器将XML文件转换成数据包(或反之),这样就可以象我们非常熟悉得那样使用诸如DataSet这样的组件来处理XML数据。
XML映象器可以打开XML文件和数据包文件(*.xml,*.cds),纲文件(*.dtd,*.xdr,*.xsd),
库文件 (*.xrp)
和转换文件(*.xtr)。后面这个转换文件是由映象器自行产生的。现在加载我们在前二篇文章中用到的Clinic.xml文件,看看数据影射成什么样。
如图1所示,Clinic.xml影射为一个Clinics结构,含有若干Clinic子项。每个Clinic有4个域:@No, Title, Date, 和Topics。注意@No是属性,其他3个是元素。
将鼠标移至Clinic节点,按右键,选择"Select All"(Ctrl+A)或者"Select All Children",这样就把@No, Title, Date and Topics各项加到中间的映象表内。此时还没有生成相应的数据集域。
我们再次到Clinic节点按下鼠标右键,选择"Create Datapacket from XML"(Ctrl+D),这时产生了相应的数据包并显示在映象器的右方,如图2所示。
映象器将XML文件转换成4个标准格式的数据包。我们还可以增加或删除数据包。这在B2B场合尤为重要,将接收到的数据(纪录)插入到数据库中。
创建并测试转换
按下Create and Test Transformation按钮,随即弹出一个DBGrid窗口,以ClientDataSet数据包格式显示Clinic.xml文件里的数据。数据转换之后,有4种方式存盘。对于初学者来说,可以存回原先的Clinic.xml文件。另外还可以存为包数据文件格式(*.xml),库文件 (repository)格式(.xrp)和转换文件格式(*.xtr)。后面的库文件可以被XMLTransform组件(在Data Access标签里)调用。
XML转换
Delphi 6里有3个XML转换组件。TXMLTransformProvider组件通过clinic.xtr文件将原始XML文件转换到ClientDataSet。
举例来说,在Delphi 6的主窗体上安放一个TXMLTransformProvider(在Data Access标签里)。将TransformRead属性的TransformationFile子属性设为clinic.xtr作为数据源。将 XMLDataFile设为clinic.xml文件。
然后安放一个ClientDataSet组件,将它的ProviderName属性设为XMLTransformProvider。
现在可以激活ClientDataSet组件了,它将由XMLTransformProvider提供的数据转换过来。它的PacketRecords属性值缺省为-1,表示转换全部XML文件。
要显示数据,我们再加入DataSource和DBGrid组件。将DataSource指向ClientDataSet,DBGrid指向DataSource,就象我们通常使用得那样。结果显示如图3。
现在可以象使用数据库数据那样使用XML文件里的数据了。如果对数据进行了修改,可以调用ClientDataSet.ApplyUpdates方法将改动的数据存回XML文件。
但是这样做是不够的。我们还得启动XML映象器,将创建方式由"XML to Datapacket"改为"Datapacket to XML"。这时如果按下"Create and Test Transformation"键,看到的是空白页。然后将转换结果存为ClinicToXml.xtr文件。
现在,将TXMLTransformationProvider的TransformationWrite属性中的子属性TransformationFile设为ClinicToXml.xtr文件。
最后在主窗体的OnClose事件中加上存盘指令:
ClientDataSet1.ApplyUpdates(-1)
程序退出之前会将作出的数据修改存回XML文件。
这样就为Delphi 6的B2B开发环境BizSnap的虚拟中间层作好了数据准备。
Ⅵ C#中基于XML的Excel中的数据导入Oracle数据库,通过调用封装好的Delphi来解析Xml的思路和代码
string strSqlTmp = "";
if (dlr == DialogResult.Yes)
{
string filePath = "";
OpenFileDialog openFiledialog1 = new OpenFileDialog();
openFiledialog1.Filter = "Excel文件(*.xls)|*.xls";
DialogResult result = openFiledialog1.ShowDialog();
if (DialogResult.OK == result)
{
filePath = openFiledialog1.FileName;
string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";
string sql_excel = "select * from [Sheet1$]";
try
{
OleDbConnection thisconnection = new OleDbConnection(conn);
thisconnection.Open();
OleDbDataAdapter mycommand = new OleDbDataAdapter(sql_excel, thisconnection);
mycommand.Fill(dst, "[Sheet1$]");
}
catch (Exception)
{
MessageBox.Show("打开Excel文件失败,文件格式不正确,可能由于Excel表中表名不是[Sheet1]引起的!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
//universalDAL.ConnectionString = DBInfos.ConnectionString.ToString();
int insertNumb = 0; //记录插入条数
int updateNumb = 0; //记录更新条数
int compareEqualIndex = -1; //判断是更新还是插入操作
if (dst.Tables[0].Columns.Count == ds.Tables[0].Columns.Count)
{
for (int i = 0; i < dst.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
{
if (string.Compare(dst.Tables[0].Rows[i][0].ToString(), ds.Tables[0].Rows[j][0].ToString()) == 0)
{
compareEqualIndex = i;
}
}
if (compareEqualIndex != -1)
{
strSqlTmp = "UPDATE PAY SET name = '" + dst.Tables[0].Rows[i][1].ToString() + "', " +
"sex = '" + dst.Tables[0].Rows[i][2].ToString() + "', " +
"daynum = '" + dst.Tables[0].Rows[i][3].ToString() + "' " +
"wages = '" + dst.Tables[0].Rows[i][4].ToString() + "' " +
"subsidy = '" + dst.Tables[0].Rows[i][5].ToString() + "' " +
"comm = '" + dst.Tables[0].Rows[i][6].ToString() + "' " +
"JBF = '" + dst.Tables[0].Rows[i][7].ToString() + "' " +
"OTHER1 = '" + dst.Tables[0].Rows[i][8].ToString() + "' " +
"DELIVER = '" + dst.Tables[0].Rows[i][9].ToString() + "' " +
"CHECK_ON = '" + dst.Tables[0].Rows[i][10].ToString() + "' " +
"MALINS = '" + dst.Tables[0].Rows[i][11].ToString() + "' " +
"OLDAGE = '" + dst.Tables[0].Rows[i][12].ToString() + "' " +
"OTHER2 = '" + dst.Tables[0].Rows[i][13].ToString() + "' " +
"DETAIN = '" + dst.Tables[0].Rows[i][14].ToString() + "' " +
"SAL = '" + dst.Tables[0].Rows[i][15].ToString() + "' " +
"AREA = '" + dst.Tables[0].Rows[i][16].ToString() + "' " +
"BRANCH = '" + dst.Tables[0].Rows[i][17].ToString() + "' " +
"JOB = '" + dst.Tables[0].Rows[i][18].ToString() + "' " +
"WHERE NUM = '" + dst.Tables[0].Rows[i][0].ToString() + "'";
//universalDAL.ExecuteNonQuery(strSqlTmp);
updateNumb++;
compareEqualIndex = -1;
}
else
{
strSqlTmp = "INSERT INTO PAY(num,name,sex,daynum,wages,subsidy,comm,JBF,OTHER1,DELIVER,CHECK_ON,MALINS,OLDAGE,OTHER2,DETAIN,SAL,AREA,BRANCH,JOB)" +
"VALUES('" + dst.Tables[0].Rows[i][0].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][1].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][2].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][3].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][4].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][5].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][6].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][7].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][8].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][9].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][10].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][11].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][12].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][13].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][14].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][15].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][16].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][17].ToString() + "'," +
"'" + dst.Tables[0].Rows[i][18].ToString() + "')";
int intinset=DbHelperOra.ExecuteSql(strSqlTmp);
insertNumb++;
}
}
MessageBox.Show("成功更新" + updateNumb + "条记录,插入" + insertNumb + "条记录!", "提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
DataShow(" 1=1");
}
else
{
MessageBox.Show("Excel文件列的格式不符合数据字典信息列的格式", "提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
}
}
Ⅶ Delphi ClientDataSet 数据库 字符型字段 TWideStringField TStringField 如何共存
简单用法:
数据库-->ADOconnetion-->ADOquery-->DataSetProvider-->ClientDataSet
DataSetProvider1.dataset := ADOquery1;
ClientDataSet1.ProviderName:='DataSetProvider1';