C++Builder 程序员博客
4 Sep
我现在做一个连锁酒店的C/S系统他们每个分店都有自己的数据库,然后作为前台只需要本地服务器,这个好办。然后就是后台账务查询他要查询所有站点的数据也就是多个服务器(数据库)里的数据,比如(有两个站点a和b):他们都有“营业历史”这个表——a.营业历史和b.营业历史,我现在要在后台综合查询这个表如何查询?有什么控件?sql语句如何写?无论c#还是 C++都可以。
有多种解决方式
1,建立中央数据库,各前台服务器定时把数据回传同步中央数据库,在中央数据库中查询。
2,使用分布式数据库,可以物理分布逻辑集中,sql与单个数据库一样Oracle可以用
DATABASE LINK做分布式
具体要看你使用数据库产品的类型,目前流行的数据库产品(oracle,sqlserver)都支持多数据库查询的,实际上,即使是桌面数据库(access)也支持不同数据库文件之间的访问
另外,某些数据引擎也支持不同数据库之间的访问, 早在多年前,BDE就支持不同数据库别名之间的访问
如:有两个数据别名:别名1和别名2,在别名1中可以跨库访问别名2中的内容
select * from :别名2:testtable
用一下TADOQuery,然后加上SQL就可以了。
只要查到将两条的记录(相同数据库结构)用union 或者union all联合就OK了。
楼上的办法好
SELECT * FROM 营业历史, d:database.营业历史 WHERE XXXXX
5 Aug
RT,程序目录可选,PATH如何填写,谢谢啦!!
没有看懂你的意思
不想要固定的目录,能否指定到程序安装目录?如上图
用ExtractFilePath(Application->ExeName)获取EXE所在目录!!
或者程序运行时,取当前路径即可
好的,谢谢,我试试,呵呵
2 Aug
Error 00018. 0×310000 (r) (Thread 0×0960):
Bad parameter: A bad memory block (0×1AE98D8) has been passed to the
function.
SysFreeMem(0×0294C000)
Call Tree:
0×0247F497(=reportprint.dll:0×01:08E497)
0×0242DCC4(=reportprint.dll:0×01:03CCC4)
0×0242E1F4(=reportprint.dll:0×01:03D1F4)
0×02437A63(=reportprint.dll:0×01:046A63)
0×023F1F53(=reportprint.dll:0×01:000F53)
0×019D3A26(=rbjtjb.dll:0×01:002A26)
不知道是哪里错了?打开窗口的时候老是报错,codeguard报错
大家一起讨论讨论
21 Jul
PARADOX网上资料找了一上午都没找到,问几个基础问题,新建一个表 字段 ID NAME OLD 怎么建立 ID 要自动增长的数字类型 NAME 字符类型 OLD 是数字类型 。命名贴下谢谢,还有常用数据类型是那几个。
SQL 语句有不 我想点击下程序的按钮 就建立一张表格
19 Jul
我要设计一个仪表检测程序,采集仪表的输出量并保存。目前的问题是有的仪表输出的是电流值,有的仪表输出的是脉冲值,那我的想法是在access中设计两种数据表来分别保存,但不知道在查询信息时,如何在DBGrid中显示这两个表中的信息,然后采用不同格式的报表打印。例如,一家公司送来两只表,区别如上述所说的输出量性质,那么当我按公司名称搜索检测记录时,这家公司的两只表应同时显示出来。请哪位高手能给分析下,提供这样的数据库设计思路,谢谢。
SQL可以直接连接多个表的啊
SELECT * from table1,table2 where table1.公司=table2.公司
或
SELECT * from table1 inner join table2 on table1.公司=table2.公司
不知道是不是我没理解楼主的意思~~-_-
<
上学的时候没有学过数据库吗?
典型的select 语句啊,不需要什么设计思路啊
adoquery1->Close();
adoquery1->sql->Clear();
adoquery1->sql->Text="SELECT * from table1,table2 where table1.公司=table2.公司"
try
{
adoquery1->Open();
}
catch(…)
{
//error…..
}
建议lz找本SQL的书看看
27 Apr
在bcb中用到的控件有ADOQuery,Button1,Button2,Edit1,image1.在数据中已经建好了表Picture(id int,pic,image,);程序里是把D盘中的一张图片存入Picture中,可是那位高手用的是XP+BCB6+Oracle9i,可是我的是XP+BCB6+SQLServer。代码是高手给的,所以希望用SQLServer的高手,修改一下。
//—————————————————————————
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include"jpeg.hpp"
//—————————————————————————
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//—————————————————————————
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//—————————————————————————
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADOQuery1->Close();
ADOQuery1->SQL->Text="Insert into Picture values(:id,:pic)";
ADOQuery1->Parameters->Items[0]->Value=1;
ADOQuery1->Parameters->Items[1]->LoadFromFile("d:\ FF70.JPG",ftBlob );
ADOQuery1->ExecSQL();
}
//—————————————————————————
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TMemoryStream *MS;
TJPEGImage *jpg;
MS = new TMemoryStream;
jpg = new TJPEGImage;
ADOQuery1->Close();
ADOQuery1->SQL->Text="select id,pic from Picture where id=1";
ADOQuery1->Open();
Edit1->Text=ADOQuery1->FieldValues["id"];
((TBlobField *)ADOQuery1->FieldByName("pic"))->SaveToStream(MS);
MS->Position=0;
jpg->LoadFromStream(MS);
Image1->Picture->Assign(jpg);
delete jpg;
delete MS;
}
//[code=C/C++][/code]
程序基本没问题
ADOQuery1->Parameters->Items[1]->LoadFromFile("d:\ FF70.JPG",ftBlob );
"d:\ FF70.JPG"多了个空格
我用x2k+bcb6+sqlserver测试通过
Oracle和SQLServer对于ADO的操作其实差不多,只是ADOConnection的连接不一样!!
<
<
22 Apr
有三张数据表角色表、权限表以及这两张表的关系连接表,用DBGrid连接ADOQuery显示角色表里的信息,当要删除角色表里的一个角色时,如何删除关系连接表里的跟这个角色有关的信息?
确定删除的信息后,先删除子表的记录信息,再删除关联子表的主表的记录信息
<
角色表里面的key应该是关系表里面的foreign key吧
如果在数据库中设置外键限制比较好,这样可以省去一些代码
数据库完整性
添加主键 外键
<
<
10 Apr
用ibx组件连接firebird,ibdatabase的connected设置为active时会出现登陆窗口,我把那个loginprompt设置为FALSE,再重新连接的话,会出现错误,说用户没有定义。。。,不知道哪里还需要再设置下,还是他只能这样的?
不应该这样的,我没有用过ibdatabase,但看上去好像是连接参数不对,用户没定义,可能你在连接参数中指明的用户ID,在数据库中没有找到吧?
我没用过ibx组件,我用ado连mysql的
你看是不是哪里要填写用户名和密码的?
用是可以用,但是我是想在ibexpert添加记录,删除记录,然后cb中相应的用ibtable中设置active来改变显示的数据,但是如果那边更新了数据,就一定会出这个登陆窗口,不知道它是否可以用代码去实现输入密码的操作?
如果是ibtable的话,你有没有用TIBTransaction?
加一个TIBTransaction,并使它的defaultdatabase指向你的ibdatabase
将你的ibtable的database指向你的ibdatabase,Transaction指向上面的TIBTransaction就应该OK了
我是用的这三个控件连接的firebird,然后用了datasouce和dbgrid来显示数据表,但是问题是我在ibexpert中删除了一些字段,然后再重新连接的时候就会出错,dynamic sql error sql error code=-206,column unknow 字段名。不知道为什么,还有就是我说的重新连接要从ibdatabase的connection属性设置开始,然后出现登陆框,要输入密码才有用,然后再去设置ibtable中的active,为甚麽不可以直接只设置ibtable中的active,ado连接的时候是可以这样的,望指教,谢谢
删除字段,当然可能报错,除非删字段时你的表在BCB中没打开且你的字段没有加载在IBTable及DBGrid中(一般数据库设计好,不会轻易改表结构的)
如要不报错.可用打开IBTable的Fields Editor,删除所有字段,打开DBGrid的Colnums Editor,删除所有字段.
另外的登陆框问题,我从没遇到过,会不会是你firebird的版本问题?换个版本试试.
同意keiy老大说的,加个Transaction,我也一直这么用,没什么问题。
12 Mar
学习使用,我下载了几个c++ builder,里面都没有数据库文件,请哪位提供个给我,学习使用,谢谢。。。。
你说的是interbase不是呀,网上下一个不就可以了
你的意思是没有安装BCB提供的数据库引挚吧?
是安装盘上没有,还是安装盘上有但是你没安装?
好像是我的安装盘上没有,反正就是安装不上去。。。。。就是bcb里面的borlandshare /data里面的db和dbf类型文件,可以传给我吗??我的邮箱是chp845@sina.com!!!
我的BCB有
楼上可不可以发给我呀,我重装了bde,还是没有呀,我是学习,很多资料书上都是那个实例,所以我需要那个,发给我行吗??谢谢了呀。。。
25 Feb
我使用IBConsole建立了一个数据库,怎样将该数据库导出到一个gdb文件中?
呃。。。没人知道吗?
没用过IBConsole,interbase数据库不就是一个gdb文件吗?直接保存你的数据库试试
你用interbase什么版本的?一般建库时,就直接写全,全路径。
在Datebase后面就直接写 c:XXXX.gdb了,不知道你那interbase是怎么做的。
interbase数据库文件就是一个gdb文件
呵呵。。。知道了,原来每创建一个数据库就会生成一个相应的文件,生成的这个文件就是我要的,谢谢大家的提示。