首页数据库数据库别名 如何导出DB数据库的数据

数据库别名 如何导出DB数据库的数据

编程之家2023-10-1895次浏览

大家好,数据库别名相信很多的网友都不是很明白,包括如何导出DB数据库的数据也是一样,不过没有关系,接下来就来为大家分享关于数据库别名和如何导出DB数据库的数据的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

数据库别名 如何导出DB数据库的数据

django开发用什么数据库好

使用多个数据库

New in Django 1.2: Please, see the release notes

大多数其他文档都假设使用单一数据库,本文主要讨论如何在 Django中使用多个数据库。使用多个数据库,要增加一些步骤。

定义你的数据库

使用多数据库的第一步是通过 DATABASES设置要使用的数据库服务。这个设置用于映射数据库别名和特定的联结设置字典,这是 Django定义数据库一贯的手法。字典内部的设置参见 DATABASES文档。

数据库可以使用任何别名,但是 default有特殊意义。当没有选择其他数据库时, Django总是使用别名为 default的数据库。因此,如果你没有定义一个名为 default的数据库时,你应当小心了,在使用数据库前要指定你想用的数据库。

数据库别名 如何导出DB数据库的数据

以下是一个定义两个数据库的 settings.py代码片断。定义了一个缺省的 PostgreSQL数据库和一个名为 users的 MySQL数据库:

DATABASES={'default':{'NAME':'app_data','ENGINE':'django.db.backends.postgresql_psycopg2','USER':'postgres_user','PASSWORD':'s3krit'},'users':{'NAME':'user_data','ENGINE':'django.db.backends.mysql','USER':'mysql_user','PASSWORD':'priv4te'}}

如果你尝试访问 DATABASES设置中没有定义的数据库, Django会抛出一个 django.db.utils.ConnectionDoesNotExist异常。

同步你的数据库

syncdb管理命令一次只操作一个数据库。缺省情况下,它操作 default数据库。但是加上--database参数,你可以让 syncdb同步不同的数据库。所以要同步我们例子中的所有数据库的所有模型可以使用如下命令:

$./manage.py syncdb

数据库别名 如何导出DB数据库的数据

$./manage.py syncdb--database=users

如果你不是同步所有的程序到同一个数据库中,你可定义一个数据库路由来为指定的模型实施特定的控制策略。

如果你要精细地控制同步,那么还有一种方式是修改 sqlall的输出,手工在数据库中执行命令,命令如下:

$./manage.py sqlall sales|./manage.py dbshell

使用其他管理命令

其他操作数据库的 django-admin.py命令与 syncdb类似,他们一次只操作一个数据库,使用--database来控制使用哪个数据库。

自动数据库路由

使用多数据库最简单的方法是设置一个数据库路由方案。缺省的路由方案确保对象“紧贴”其原本的数据库(例如:一个对象从哪个数据库取得,就保存回哪个数据库)。缺省的路由方案还确保如果一个数据库没有指定,所有的查询都会作用于缺省数据库。

你不必为启动缺省路由方案作任何事,因为它是“开箱即用”的。但是,如果你要执行一些更有趣的数据库分配行为的话,你可以定义并安装你自己的数据库路由。

数据库路由

一个数据库路由是一个类,这个类最多有四个方法:

db_for_read(model,**hints)

建议 model对象写操作时使用的数据库。

如果一个数据库操作可以提供对选择数据库有用的附加信息,那么可以通过 hints字典提供。详见下文。

如果没有建议则返回 None。

db_for_write(model,**hints)

建议 model对象读操作时使用的数据库。

如果一个数据库操作可以提供对选择数据库有用的附加信息,那么可以通过 hints字典提供。详见下文。

如果没有建议则返回 None。

allow_relation(obj1, obj2,**hints)

当 obj1和 obj2之间允许有关系时返回 True,不允许时返回 False,或者没有意见时返回 None。这是一个纯粹的验证操作,用于外键和多对多操作中,两个对象的关系是否被允许。

allow_syncdb(db, model)

决定 model是否可以和 db为别名的数据库同步。如果可以返回 True,如果不可以返回 False,或者没有意见时返回 None。这个方法用于决定一个给定数据库的模型是否可用。

一个路由不必提供所有这些方法,可以省略其中一个或多个。如果其中一个方法被省略了,那么 Django会在执行相关检查时跳过相应路由。

提示参数

数据库路由接收的“提示”参数可用于决定哪个数据库应当接收一个给定的请求。

目前,唯一可以提供的提示参数是实例,即一个与读写操作相关的对象的实例。可以是一个已保存的对象的实例,也可以是一个多对多关系中添加的实例。在某些情况下,也可能没有对象的实例可以提供。路由会检查提示实例是否存在,并相应地决定是否改变路由行为。

使用路由

数据库路由使用 DATABASE_ROUTERS设置来安装。这个设置定义一个类名称列表,每个类定义一个用于主路由(django.db.router)的路由。

主路由用于 Django分配数据库操作。当一个查询想要知道使用哪个数据库时,会提供一个模型和一个提示(如果有的话),并调用主路由。

Django就会按次序尝试每个路由,

直到找到合适的路由建议。如果找不到路由建议就会尝试实例提示的当前的 _state.db。如果没有提供路由提示,或者实例没有当前数据库状态,那么

主路由会分配缺省数据库。

一个例子

仅用于示例目的!

这个例子仅用于展示路由如何改变数据库的使用。本例有意忽略了一些复杂的东西以便于更好的展示路由是如何工作的。

如果任何一个 myapp中的模型包含与另一个数据库中模型的关系时,本例是无效的。参见跨数据库关系一节中介绍的 Django引用完整性问题。

本例的主/从配置也是有缺陷的:它没有处理复制延时(比如因为把写操作传递给从数据库耗费时间而产生的查询不一致),也没有考虑与数据库使用策略的交互作用。

那么,这个例子有什么用呢?本例仅用于演示一个 myapp存在于 other数据库,所有其他模型之间是主/从关系,且存在于 master、 slave1和 slave2数据库。本例使用了两个路由:

class MyAppRouter(object):"""一个控制 myapp应用中模型的所有数据库操作的路由""" def db_for_read(self, model,**hints):"myapp应用中模型的操作指向'other'" if model._meta.app_label=='myapp': return'other' return None def db_for_write(self, model,**hints):"myapp应用中模型的操作指向'other'" if model._meta.app_label=='myapp': return'other' return None def allow_relation(self, obj1, obj2,**hints):"如果包含 myapp应用中的模型则允许所有关系" if obj1._meta.app_label=='myapp' or obj2._meta.app_label=='myapp': return True return None def allow_syncdb(self, db, model):"确保 myapp应用只存在于'other'数据库" if db=='other': return model._meta.app_label=='myapp' elif model._meta.app_label=='myapp': return False return None class MasterSlaveRouter(object):"""一个设置简单主/从定义的路由""" def db_for_read(self, model,**hints):"所有读操作指向一个随机的从数据库" return random.choice(['slave1','slave2']) def db_for_write(self, model,**hints):"所有写操作指向主数据库" return'master' def allow_relation(self, obj1, obj2,**hints):"允许数据库池中的两个对象间的任何关系" db_list=('master','slave1','slave2') if obj1._state.db in db_list and obj2._state.db in db_list: return True return None def allow_syncdb(self, db, model):"显示地放置所有数据库中的模型" return True

然后在你的设置文件增加如下内容(把 path.to.替换为你定义路由的模型的路径):

DATABASE_ROUTERS= ['path.to.MyAppRouter','path.to.MasterSlaveRouter']

这个设置中,路由的顺序是很重要的,因为查询时是按这个设置中的顺序依次查询的。上例中, MyAppRouter先于MasterSlaveRouter,因此, myapp中的模型就优先于其他模型。如果 DATABASE_ROUTERS设置中两个路由的顺序变换了,那么 MasterSlaveRouter.allow_syncdb()会优先执行。因为 MasterSlaveRouter是包罗万象的,这样就会导致所有模型可以使用所有数据库。

设置好之后让我们来运行一些代码:

>>>#从'credentials'数据库获得数据>>> fred= User.objects.get(username='fred')>>> fred.first_name='Frederick'>>>#保存到'credentials'数据库>>> fred.save()>>>#随机从从数据库获得数据>>> dna= Person.objects.get(name='Douglas Adams')>>>#新对象创建时还没有分配数据库>>> mh= Book(title='Mostly Harmless')>>>#这个赋值会向路由发出请求,并把 mh的数据库设置为与 author对象同样的>>>#数据库>>> mh.author= dna>>>#这会强制'mh'实例使用主数据库...>>> mh.save()>>>#...但如果我们重新获取对象,就会从从数据库中获取>>> mh= Book.objects.get(title='Mostly Harmless')

手动选择数据库

Django也提供一个可以让你通过代码完全控制数据库使用的 API。手动定义数据库分配优先于路由。

为一个查询集手动选择一个数据库

你可以在查询集“链”中的任何点为查询集选择数据库。我们通过在查询集上调用 using()来得到使用指定数据库的另一个查询集。

using()使用一个参数:你想要运行查询的数据库的别名。例如:

>>>#这会运行在“缺省”数据库上。>>> Author.objects.all()>>>#这同样会运行在“缺省”数据库上。>>> Author.objects.using('default').all()>>>#这会运行在“ other”数据库上。>>> Author.objects.using('other').all()

为 save()选择一个数据库

在使用 Model.save()时加上 using关键字可以指定保存到哪个数据库。

例如,要把一个对象保存到 legacy_users数据库应该这样做:

>>> my_object.save(using='legacy_users')

如果你不定义 using,那么 save()方法会根据路由分配把数据保存到缺省数据库中。

把一个对象从一个数据库移动到另一个数据库

当你已经在一个数据库中保存了一个对象后,你可能会使用 save(using=...)把这个对象移动到另一个数据库中。但是,如果你没有使用恰当的方法,那么可能会出现意想不到的后果。

假设有如下的例子:

>>> p= Person(name='Fred')>>> p.save(using='first')#(第一句)>>> p.save(using='second')#(第二名)

在第一名中,一个新的 Person对象被保存到 first数据库中。这时, p还没有一个主键,因此 Django执行了一个INSERT SQL语句。这样就会创建一个主键,并将这个主键分配给 p。

在第二句中,因为 p已经有了一个主键,所以 Django在保存对象时会尝试在新的数据库中使用这个主键。如果 second数据库中没有使用这个主键,那就不会有问题,该对象会复制到新数据库。

然而,如果 p的主键在 second数据库中已经使用过了,那么 second使用这个主键的已存在的对象将会被 p覆盖。

有两种方法可以避免上述情况的发生。第一,你可以清除实例的主键。如果一个对象没有主主键,那么 Django会把它看作一个新对象,在保存到 second数据库中时就不会带来数据的损失:

>>> p= Person(name='Fred')>>> p.save(using='first')>>> p.pk= None#清除主键。>>> p.save(using='second')#写入一个全新的对象。

第二种方法是在 save()方法中使用 force_insert选项来保证 Django执行一个 INSERT SQL:

>>> p= Person(name='Fred')>>> p.save(using='first')>>> p.save(using='second', force_insert=True)

这样可以保证名为 Fred的人员在两个数据库中使用相同的主键。如果在保存到 second数据库时主键已被占用,会抛出一个错误。

选择一个要删除数据的数据库

缺省情况下,一个现存对象从哪个数据库得到,删除这个对象也会在这个数据库中进行:

>>> u= User.objects.using('legacy_users').get(username='fred')>>> u.delete()#会从 `legacy_users`数据库中删除

通过向 Model.delete()方法传递 using关键字参数可以定义在哪个数据库中删除数据。 using的用法与 save()方法中使用这个参数类似。

例如,假设我们要把一个用户从 legacy_users数据库移动到 new_users数据库可以使用如下命令:

>>> user_obj.save(using='new_users')>>> user_obj.delete(using='legacy_users')

多数据库情况下使用管理器

在管理器上使用 db_manager(),可以让管理器访问一个非缺省数据库。

例如,假设你有一个操作数据库的自定义管理器 User.objects.create_user()。

因为 create_user()是一个管理器方法,不是一个查询集,所以你不能

用 User.objects.using('new_users').create_user()。( create_user()方法

只能用于 User.objects管理器,而不能用于,管理器衍生出的查询集。)解决方法是使用 db_manager(),就象下面这样:

User.objects.db_manager('new_users').create_user(...)

db_manager()返回的是绑定到你指定的数据库的管理器的一个副本。

多数据库情况下使用 get_query_set()

如果你在管理器中重载了 get_query_set(),请确保在其父类中也调用了相同的方法(使用 super())或者正确处理管理器中的 _db属性(一个包含要使用的数据库名称的字符串)。

例如,如果你要从 get_query_set方法返回一个自定义查询集类,那么你可以这样做:

class MyManager(models.Manager): def get_query_set(self): qs= CustomQuerySet(self.model) if self._db is not None: qs= qs.using(self._db) return qs

在 Django管理接口中使用多数据库

Django的管理接口没有明显支持多数据库。如果想要支持的话你必须写自定义 ModelAdmin。

如果要支持多数据库,那么 ModelAdmin对象有五个方法要自定义:

class MultiDBModelAdmin(admin.ModelAdmin):#为方便起见定义一个数据库名称常量。 using='other' def save_model(self, request, obj, form, change):#让 Django保存对象到'other'数据库。 obj.save(using=self.using) def delete_model(self, request, obj):#让 Django从'other'数据库中删除对象。 obj.delete(using=self.using) def queryset(self, request):#让 Django在'other'数据库中搜索对象。 return super(MultiDBModelAdmin, self).queryset(request).using(self.using) def formfield_for_foreignkey(self, db_field, request=None,**kwargs):#让 Django基于'other'数据库生成外键控件。 return super(MultiDBModelAdmin, self).formfield_for_foreignkey(db_field, request=request, using=self.using,**kwargs) def formfield_for_manytomany(self, db_field, request=None,**kwargs):#让 Django基于'other'数据库生成多对多关系控件。 return super(MultiDBModelAdmin, self).formfield_for_manytomany(db_field, request=request, using=self.using,**kwargs)

PB中如何备份出数据库

几个与PB连接数据库相关的问题

1.Power script语言里的事务处理对象怎么理解

PowerBuilder程序与数据库之间传递信息的一个结构变量,共有15个成员.你可以详细列表它的所有成员看看它的组成.PB的应用程序会初始化一个全局的结构体变量,SQLCA,当然你也可以自定义一个自己的事务对象.

1 DBMS string所使用的数据库管理系统的名字,如Sybase,Oracle,ODBC。

2 Database string要连接的数据库名字。

3 UserID string连接数据库所用的用户名。有的DBMS不需要此项。

4 DBPass string用户连接数据库的口令。

5 Lock string这是数据库的保护级别,一般不必给出。

6 LogID string登录到数据库服务器上的用户名,有的DBMS不需要此项,但Sybase和Oracle需要指定这个参数。

7 LogPass string登录到数据库服务器上的用户口令。这个属性可设可不设,但Sybase和Oracle需要指定口令。

8 ServerName string数据库服务器名。

9 AutoCommit boolean指定是否将数据库设置成自动提交所有事务。默认是False,也就是说,必须在应用程序中进行事务管理,并在适当的时候对数据库提交事务。如果选择True,则每个事务都由系统自动提交。

10 DBParm string用于向数据库传递特殊信息的属性。

11 SQLCode long指示最近一次SQL操作失败或成功。它的取值为:返回结果 0无错误。-1出现一个错误。 100没有检索到数据。

12 SQLNRows long最近一次SQL操作影响的行数,数据库不同其含义也不同。

13 SQLDBCode long数据库错误代码。不同的数据库的含义不同。

14 SQLErrText string相应于SQLDBCode属性中错误码的文字说明。

15 SQLReturnData string返回DBMS执行SQL的附加信息,不同的DBMS其值不同。

2.我常见到做好的PB程序使用.ini文件来控制与数据库连接,可以方便的进行应用程序移植只需修改其中与数据库连接参数即可,我想问这些.ini文件只能使用手工编写吗,我见到很多.ini文件参数极多不象手写好象是机器生成的,不知道如何生成啊?请大家指教

1、其实PB中在新建---点TOOL----FILE EDIT可以生成(编辑)INI文件。最直接就是工具栏中的EDIT图标。

2、机器生成代码是:点DATABASE图标-----选择连接方式。如:选 MSS MICROSOFT SQL SERVER右键-NEW PROFILE按要求填定一些参数后在--PREVIEW中可以看到代码,把它复制到INI文件中就行了。

3.编程经验--PB数据库连接

作者:郭洪建无法确定网上来源,如有准确首发,请与本站联系

通过这些年的信息系统开发经验,使我对POWERBUILDER的理解更进一步,最近在开发某子系统模块时,遇到了一个奇怪的问题,这里给大家介绍一下.

通常在使用PB和数据库管理系统(DBMS)连接时,使用两种方式:

一、开放数据源接口(ODBC)连接

ODBC是通过支持美国微软公司开放服务结构(WOSA,Windows Open Services Architecture)中的一部分.在PB中通过配置 SQLCA.DBMS=‘ODBC’对象的属性可使应用程序通过ODBC连接到数据库。

ODBC的具体配置包含了数据源、驱动程序类型、缓冲池等各种细节参数。

例子:

SQLCA.DBMS="ODBC"

SQLCA.AutoCommit= False

SQLCA.DBParm="C,C"

PWD="',C"

二、专用数据库接口

每个数据库管理系统(DBMS)均提供相应的客户端驱动,为了更好的服务于数据库。

在这里我们使用的是Microsoft sqlserver 2000的客户端程序。通过设置 SQLCA.DBMS="MSS Microsoft SQL Server"使客户端通过专用数据库接口连接到数据库。

该类接口的参数配置除了服务器名、数据库名、LogId、LogPass外还包含了连接协议等用户验证方式等,可通过服务器端或客户端的配置程序进行配置。

SQLCA.dbms="MSS Microsoft SQL Server"//接口类型

SQLCA.database="master"//数据库

SQLCA.userid=""

SQLCA.dbpass=""

SQLCA.logid="sa"

SQLCA.logpass="xxxx"

SQLCA.serverName=".\xxx"//服务器名

SQLCA.dbparm="Commit"

SQLCA.autocommit= false

以上介绍的是PB与数据库连接时常用的方法。

往往根据不同的应用环境选择连接方式,在单机环境下多采用的是ODBC连接,因为在发行环节上相对要容易些。在网络环境下多采用专用数据库连接,这样可以提高系统的可靠性与执行效率。专用数据库的发行环节往往要配上相应DBMS客户端的动态连接库(DLL),并把它.

PB与ASA数据库连接问题!

一.连接步骤

1.添加数据源。WINDOWS98中----我的电脑---控制面版----ODBC数据源32位-----系统DSN---添加---选择你使用的数据库

2.在工具条上点击DB PROFILE选择已建立好的数据库连接,单击EDIT在弹出的对话框中选PREVIEW里面就是连接数据库的语句,COPY就OK了。

二.DB_profile写法(以lin.com的tax例程为例)

http://down.laozang.com/lin/code/tax.zip

tax.ini

[Database]

DBMS=ODBC

Database=test

DbParm=c

三.打包所需文件

参看以下文章:

http://www.laozang.com/pbbbs/htm_data/12/0505/233.html

四.容易出现的问题及解决方法

导致ASA数据库无法连接的问题有以下几种:

1、ODBC配置错误。没有配置数据源,数据库的用户名或口令错误等都会导致数据库无法连接。

解决的办法:检查数据源的配置,如果没有在ODBC中配置数据源则按照向导添加数据源即可;口令错误只需改为正确的即可。

2、连接时提示LOG文件错误。这样的问题大多出现在重装系统后、源码移植到其他系统、数据库文件路径改变之后。

解决的办法:在创建ASA数据库的时候不创建LOG文件,如果已经创建了LOG文件则可以利用PB自带的工具Sybase central来去掉LOG文件和数据库文件的关联。操作步骤如下:

a)启动Sybase central在左边的树型目录中选择Utilities;

b)双击右边出现的条目中的change log file settings,直接next;

c)点Browse选择需要去除log文件的数据库文件,选好后next;

d)这里你会看到一些数据库的信息,log文件名,文件大小等。next;

e)去掉Maintin the following transaction log file前面的对勾,Finish;

f)配置ODBC连接数据库就可以了。

3、数据库文件损坏。此类错误一般不常见,可能由于病毒破坏或误操作引起。

解决的办法:如果以前有备份用备份文件覆盖原文件即可,如果没有备份文件就只能重新建库了!

PB8如何使用OLE DB练到ASA数据库

(本文来自sybase网站翻译 by金色年华)

原文出处:

http://www.sybase.com.cn/cn/content/support/exp_jszc_pb_dbms_00017.htm

Connecting to ASA Server(7.01 GA) via OLE DB in PowerBuilder 8

Adaptive Server Anywhere includes an OLE DB provider named ASAProv. One of the features of ASAProv(dboledb7.dll) is that you do not have to deploy ODBC. In other words, you can connect to an ASA database either via OLE DB or via OLE DB/ODBC bridge.

在pb中通过OLE DB连接到ASA数据库的步骤如下:

在命令提示符下键入如下命令,启动 ASADEMO:

dbsrv7 asademo-x tcpip-n asademo

("asademo"-你选择运行的数据库.确定你没有正在运行一个同名的数据库,否则会出错)

有两个方法通过 OLE DB连接到 ASA Server:

1) OLE DB/ODBC bridge

对于这种连接,你必须在数据库参数中,指定有效的 ODBC数据源,连接的脚本如下:

// Profile asa_oledb

SQLCA.DBMS="OLE DB"

SQLCA.LogPass="sql"

SQLCA.LogId="dba"

SQLCA.AutoCommit= False

SQLCA.DBParm="PROVIDER='ASAProv',DATASOURCE='asa'"

2) OLE DB(不需要配置 ODBC)

你可以通过一个扩展名为.udl的单独的文件,提供连接信息,在OLE DB中访问数据.这个文件与 Microsoft DataLink(.udl) file类似.你必须在系统中安装 Datalink API以便于创建和使用.udl文件.

创建.udl文件的方法:

在当前目录里的空白处单击鼠标右键,选择新建文件,选择 Microsoft Data Link.如果没有创建 Microsoft Data Link的选项,需要创建一个文本文件,然后更改扩展名为.udl.双击这个文件,添加连接信息.详情请访问msdn.microsoft.com搜索 Data Link(此处原文有乱码,具体内容不详).

【讨论】pb连接MS SQL Server问题!

一.连接步骤

1)服务器安装SQL Server并启动,创建数据库。

2)客户机安装SQL Server客户端。

3)启动PB,配置数据源描述(通过直连接口,不建议用ODBC)。

4)连接。

二.DB_profile的写法

在ini文件里设置

[Database]

DBMS=MSS Microsoft SQL Server 6.x

Database=databasename

UserId=

LogID=

DatabasePassword=

LogPass=

ServerName=

AutoCommit=False

在程序里用profilestring读取

附加资料:ms sql server配置文件设置

ms sql server配置文件设置:

dbms="mss"//只须在*.ini文件中用这个代码便告诉pb使用的ms sql server

Database:所用数据库

LogId:sql server的登陆账号

LogPass=口令

servername:允许数据库服务器连接的计算机名

autocommit:控制pb是工作在事务处理范围内还是工作在事务处理范围外

dbparm:dbms的专用连接参数

以下参数:

language:在显示错误消息和日期格式时指定要使用的语言,在服务器上必须设置该直.

lock:事务处理隔离层

log:文本和图像数据的更新是否应该纪录到事务日志中.

systemprocs:系统存储过程和用户定义的存储过程是否显示在各种各样的pb画板中.

pbcatalogowner:pb存储中表的缺省者.

async:允许在服务器上进行同步操作.0:同步,1:异步

dbgettime:当async=1时,使用该参数设置用户在检索行时pb等待来自pb的响应的秒数.

cursorlock:release和cursorscroll参数一起使用可设置光标的锁定选项.lock,opt,optval,readonly

cursorscroll:设置光标的滚动选项.

staticbind:控制pb是否在检索数据前获取dbms中的结果集描述.

dbtextlimit:控制返回的文本字段的最大长度而不用将文本作为二进制大型数据对象来处理.

appname:设置连接时所使用的应用程序名.

host:设置连接似的工作站名.

packetsize:设置使服务器向pb传送数据时所设置的包大小.

secure:设置是否想使用winnt集成逻辑安全性和安全sql server连接缺省0使用标准安全性,1集成安全性.

PowerBuilder与Oracle的连接

PowerBuilder(PB)和Oracle分别是前端开发工具和RDBMS的主流产品。PB提供了两种与Oracle连接的接口:PowerSoft内置的数据库接口(Native Database Interface)和ODBC接口。本文介绍使用PB6.0内置Oracle接口的方法,包括数据描述文件的设置、存储过程的调用和存储过程作为数据窗口数据源的操作方法等内容,使用的RDBMS的Oracle 7.3。

PowerBuilder与Oracle的连接

假定已安装Oracle客户端应用程序。可用Sqlplus或Tnsping等是否能连接到Oracle数据库,确定在SQLNET配置文件中使用的数据库别名(Database Alias,又称服务器名,Server Name)。如有疑问,可在Oracle客户端程序目录下tnsname.ora文件中找到。另外保证搜索路径已包括SQLNET应用程序的安装目录(如C:\ORAWIN95\BIN)。

进入PB的Database Profiles画笔,可看到所有已安装的数据库接口(PB6.0缺省安装的是Oracle 7.3版的接口,如使用低版本的Oracle,需在安装时指定),选择“O73 Oracle 7.3”,点击“New”按钮,进入Database Profile Setup对话框。在“Connection”页输入下列信息:

Profile Name:为该Database Profile起一个有意义的名称;

Server:TNS:ServerName,其中ServerName为上述数据库别名(服务器名),如@TNS:ORA73;

Login ID:Oracle数据库中实际的用户名,由于PB初次连接到数据库时要自动建立五个系统表(PowerBuilder Catalog Table;SCATTBL,PBCATCOL,PBCATEDT,PBCATFMT,PBCATVLD,存储表的扩展属性),因此第一个连接到Oracle的用户必须具有建表、给PUBLIC角色授权等权限。例如可用SYSTEM用户进行第一次连接,此后的连接对用户则无特殊要求;

Password:该用户的口令。

设置上述内容后,即可连上Oracle。为优化数据库连接,还可设置下列选项:

Prompt for Database Information:连接时是否提示用户输入用户名和口令;

Generate Trace:启动DB跟踪工具,跟踪连接;

Thread Safe:开发需要多线程环境支持的分布式应用时,选择该项。缺省为未选,适用于非分布应用;

PBDBMS:与存储过程调用方式有关的参数。Oracle为7.2或更高版本时,清除该选项,此时带IN OUT参数的存储过程可作为数据窗口数据源。7.2版本以下,选择该项,调用PBDBMS.Put-Line建立存储过程的SQL语句,缺省是选中;

Commit on Disconnect:断开连接时,指定提交或回退未提交的事务;

Case Sensitive:连接的Oracle服务器是否区分大小写。注意该项选中时,所有主键、包含主键的表名、外键须全为大写字符。

PowerBuilder Catalog Tables Owner:指定拥有PB系统表的用户,缺省为“SYSTEM”。如果要使用多种显示格式或有效性规则,可以在不同的用户下建立几套系统表;

Table Criteria:指定满足哪些条件的表、视图和同义词可在“Select Tables”对话框中显示出来。例如DEV用户下销售子系统的表都以SALE开头,则可以用SALE%、DEV、“TABLE”、“VIEW”指定只显示DEV用户以SALE开头的表和视图;

Asynchronous:选择该项,可在一个复杂的SQL语句执行过程中,返回第一行结果前,切换到其他操作;

Number of Seconds to Wait:若上一项选中,还可进一步通过该项指定检索数据时,等待数据库响应的时间;

Retrieve Blocking Factor:决定数据窗口对象一次可从数据库取出的记录数;

Number of SQL Staments Cached:PB可将数据窗口对象产生的SQL语句和嵌入式SQL语句保存在SQL语句缓冲区,该参数指定缓冲区为PB保留的SQL语句数目。该数值可由下式计算:SQLCache=服务器OPEN—CURSORS数-5(保留的游标数)-本连接预期使用的最大游标数;

Disable Bind:指定是否将输入变量与SQL语句绑定,此参数影响PB为数据窗口对象生成INSERT语句的方式;

Static Bind:数据窗口对象检索数据前是否检测SELECT语句的合法性;

在Syntax页,还可指定日期、时间的格式等。在Preview页可查看Database Profile设置对应的PowerScript写法。

Oracle存储过程的使用

归纳起来PB6.0中调用Oracle存储过程有以下四种方法。

方法一:以关键字RPCFUNC声明存储过程;

方法二:以DECLARE PROCEDURE语句声明存储过程;

方法三:以动态SQL语句实现;

方法四:调用函数PBDBMS.Put-Line。

一般情况下,方法一能得到较好的运行效率和更完善的功能。因此推荐使用方法一。但是某些类型的存储过程只能使用其他方法。以下重点介绍方法一和方法二。

两种方法比较起来,有以下几点主要区别:

1)方法一适用于具有IN、OUT和IN OUT参数的存储过程,而方法二仅支持IN

PB10连接SQL Server的配置

可能初次使用pb10的朋友无法顺利连接到sql server,一方面没有了mssql server专用接口了,另一方面数据库管理系统(DBMS)换成了“OLE DB”,配置起来有点不顺手!下面就来介绍pb10中用OLE DB连接sql 2000数据库。

在安装pb10的时候选择custom/full方式安装(默认的安装方式不会安装ole db接口),next-》如果你没有安装.net则不要选择列表中的ADO.net....项。一路next完成安装。

在数据库画板中找到OLE microsoft OLE DB项,在其上右键新建一个配置,在弹出的配置窗口中:

profile name:填写配置文件名//任意即可

provider:选择数据库管理系统类型,这里选择“SQLOLEDB”项

data source:服务器名(和之前的版本不太一样)。可以在下拉列表中选择,也可以填入服务器名或IP地址如:127.0.0.1等。如果上面的provider不是“SQLOLEDB”则此下拉列表中可能没有选项。

user ID:用户名。我的用户名是默认的sa

password:对应上面user ID的密码,我的密码是空的,所以不填。

到这里你就可以顺利的连接到sql server了。但是连接到哪个数据库呢?上面的参数都没有指明,我也找了半天。不要着急,在Extended里填入“database=数据库名”就可以了。(不要引号)

最后的配置文件内容为:

// Profile his

SQLCA.DBMS="OLE DB"

SQLCA.LogId="sa"//我的用户名是sa

SQLCA.AutoCommit= False

SQLCA.DBParm="PROVIDER='SQLOLEDB',DATASOURCE='NETMANAGER',PROVIDERSTRING='database=zs'"//我的数据库名是:zs;datasource后面也可以是IP地址:DATASOURCE='127.0.0.1'

至此就完成了pb10下用OLE DB连接sql server的配置!

在PB中使用FoxPro数据库的方法

重庆工业管理学院蒋波

---- Power Builder是十分优秀的用于客户/服务器环境信息管理系统开发工具,其优秀之处不仅是因为可以开发基于客户/服务器模式的系统,而且简单、易学,Power Builder自身是没有数据库管理系统(DBMS)的,它是首先通过不同的驱动程序联接不同的数据库,再通过这种联接,实现对数据的管理。Power Builder同时随盘附带有一个小型的数据库管理系统:SQL Anywhere,所以用户也可以直接开发用于单机的完整的信息管理系统。

----本人以前曾开发过基于FoxPro环境下的数据库系统,但FoxPro的编程太麻烦,不但要处理数据的管理,而且还要花大量的精力处理输入、输出的格式等。但有着可视化编程环境的Power Builder却不同,处理输入、输出是件相当简单的事情,于是,本人偿试用Power Builder来管理以前的数据库。 c在Power Builder系统中,使用FoxPro的数据库有两种方法:一是利用ODBC联接FoxPro数据库;另一种方法是将FoxPro的数据库转换到SQL Anywhere的数据格式。

----一、利用ODBC联接FoxPro数据库

----在Power Builder中,直接访问FoxPro数据库只能通过ODBC方式。

----在开发环境下,可以直接在PowerBar画板上配置ODBC,联接FoxPro数据库,方法如下:

单击Configure ODBC工具钮

在Installed Drivers目录框中选择:Microsoft Foxpro Driver(*.dbf)

单击“Create”按钮

命名数据源名、选择版本

取消“使用当前工作目录”选项

单击选定目录,选择被联接数据库所在的目录

确定退出

----通过ODBC方式联接的FoxPro的数据库,一定要满足FoxPro的数据库格式,即数据库文件结构必须是:“32字节文件描述若干个32字节的字段描述结构描述结束符(0D)记录1,记录2,……文件结束符(1A)”。由此看来,传统的DBF数据库文件均可通过该方式联接。对于Visual FoxPro环境下建立的表(Table),其结构与传统的数据库结构是不同的,它在字段描述结束符(0D)与记录之间加上了二百多个字节的内容,但在未纳入VFP的数据库(Dbc)之前,其内容为“00”,此时仍可以通过这种方式联接,一旦纳入数据库中,该段字节已被填上了其它内容,无法再联接。

----在Power Builder应用程序中,使用事务处理对象来联接数据库,这种事务处理对象,即有默认的SQLCA,用户也可以自己生成,以方便访问多个数据库。在程序中使用事务处理对象时,一般必须先指明DBMS、DbParm两个属性,对于FoxPro数据库,还必须指明 Database、 userid、servername、几个属性,这一点是与访问其他类型的数据库不同的地方。

sqlca.dbms="ODBC"//指定联接方式ODBC

sqlca.database="D:\prg\pubdata"//指定被联接数据库所在目录

sqlca.userid="public"//用户识别号,都为 public

sqlca.servername="FOXPRO"//服务器名:均为FOXPRO

sqlca.dbparm="C"//数据源名

connect using sqlca;//实施联接

……

----通过对FoxPro数据库的联接,用户便可以在Power Builder开发环境下、应用程序中使用这些数据库,快速地开发出自己的信息管理系统,实现对这些数据库的维护与管理。

----二、将DBF文件转换为SQL Anywhere的DB文件格式

----在Power Builder环境下,附带有一个数据库系统——SQL Anywhere,在Power Builder中利用它,用户可以直接建立、维护数据库。在SQL Anywhere中,数据库结构虽然与VFP不同,但概念是一致的,即:数据库是系统中相关的各种数据,这些数据又因不同用途组织成不同的表,这些表共同构成数据库,与传统的数据库(DBF)相类比,PB、VFP中的表即是传统意义的数据库,PB、VFP中的数据库类似于传统的数据库(DBF)文件所在的目录。SQL Anywhere中提供了将传统的DBF文件转换为该系统下的数据库文件(DB)中的表的工具。为了实现这一转换,用户必须先建立一个新的表,再将DBF格式的文件内容导入该表中。

----对于DBF文件,必须是传统意义上的数据库,如FoxPro、dBase、FoxBASE环境下的数据库文件。该种数据库文件严格遵循“数据文件==数据库结构+数据库记录”这一格式。其结构如下:“32字节文件描述若干个32字节的字段描述结构描述结束符(0D)记录1,记录2,……文件结束符(1A)”

03 62 0A 07 02 00 00 00- 81 00 4C

00 00 00 00 00//文件时间、长

00 00 00 00 00 00 00 00- 00 00 00

00 00 00 00 00度、记录长、记录数

4E 41 4D 45 00 00 00 00- 00 00 00

43 01 00 00 00//第一个字段:名、类

28 00 00 00 00 00 00 00- 00 00 00<

如何导出DB数据库的数据

一、导出导入SQL Server里某个数据库

1.在SQL Server企业管理器里选中要转移的数据库,按鼠标右键,选所有任务->备份数据库。

2.备份选数据库-完全,

目的备份到按添加按钮

文件名在SQL Server服务器硬盘下输入一个自定义的备份数据库文件名(后缀一般是bak)

重写选重写现有媒体

最后按确定按钮。

如果生成的备份数据库文件大于1M,要用压缩工具压缩后再到Internet上传输。

3.通过FTP或者remote desktop或者pcanywhere等方法

把第二步生成的备份数据库文件或者其压缩后的文件传到目的SQL Server数据库,如果有压缩要解压。

4.目的SQL Server数据库如果还没有此数据库,先创建一个新的数据库;

然后选中这个新创建的数据库,按鼠标右键,选所有任务->还原数据库

还原->从设备->选择设备->磁盘->添加(找到要导入的备份数据库文件名)->确定

还原备份集->数据库-完全

最后按确定按钮。完全的数据库导入成功了。

(如果在已经存在的SQL Server数据库上还原数据库可能遇到有还有其它人正在使用它而恢复操做失败,

可以去看->管理->当前活动->锁/对象->找到数据库下锁的进程号->到查询分析器里用kill进程号杀掉这些锁,然后再做还原)

注意:如果在原有的目的SQL Server数据库上从备份文件(*.bak)还原数据库会把已经存在的表、存储过程等数据库对象全部替换成最近这次导入的备份数据库里的内容。

如果一定要还原备份文件(*.bak)里部分数据,需要另外建一个新数据库,其逻辑名称和数量同备份文件(*.bak)里数据库的逻辑名称和数量一致;

新数据库的物理文件名称取得一定要和备份文件(*.bak)里数据库的物理文件不一样才行。

二、导出导入SQL Server里某个表

1.没有防火墙,同一个局域网里或不在同一个局域网里,但通过Internet可以互相访问

在SQL Server企业管理器里选中目的数据库,按鼠标右键,选所有任务->导入数据->弹出数据转换服务导入/导出向导窗口->下一步->选数据源->数据源(用于SQL Server的Microfost OLE DB提供程序)->服务器(可选择局域网内能访问到的所有SQL Server服务器,或者直接输入IP地址)->选择使用windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)->数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步->选择目的->目的(用于SQL Server的Microfost OLE DB提供程序)->服务器(默认为上一步里选中的导出服务器,也可以选其它局域网内能访问到的所有SQL Server服务器,或者直接输入IP地址)->目的数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步->制定表复制或查询->选从源数据库复制表和视图(也可以选择用一条查询指定要传输的数据)->下一步->选择源表和视图->在要导入的表和视图前面选中源->目的出现同样的表名(可以手工修改成别的表名)->转换->列映射和转换里面可以修改源表和目的表之间字段的对应关系,修改目的表字段的类型和长度等,并可以选择创建目的表,在目的表中增加行,除去并重新创建目的表,启用标志插入等选项->确定->下一步->保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动导出导入数据,选调度DTS包以便以后执行)->保存(可以不选)->[保存DTS包(如果以后还要转移这批相同的数据,可以把本次导出导入的内容和步骤保存起来,存到SQL Server即可,保存的时候要输入DTS的包名及详细描述)->下一步-> ]->完成

正在执行包->图形界面显示创建表及插入记录的步骤和状态->完成

2.经过防火墙,不在同一个局域网里

①、导出表里的数据到文本文件:

在SQL Server企业管理器里选中目的数据库,按鼠标右键,选所有任务->导入数据->弹出数据转换服务导入/导出向导窗口->下一步->选数据源->数据源(用于SQL Server的Microfost OLE DB提供程序)->服务器(可选择局域网内能访问到的所有SQL Server服务器)->选择使用windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)->数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步->选择目的->目的(文本文件)->文件名(在自己的电脑硬盘中生成一个自定义的文本文件)->下一步->制定表复制或查询->选从源数据库复制表和视图(也可以选择用一条查询指定要传输的数据)->下一步->选择目的文件格式->源(选择要导出的表)->用默认的带分隔符->选第一行包含有列名称选项->下一步->保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动导出到文本文件,选调度DTS包以便以后执行)->保存(可以不选)-> [保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成

正在执行包->图形界面显示表到文本文件的步骤和状态->完成

如果生成的文本文件大于1M,要用压缩工具压缩后再到Internet上传输。

②、通过FTP或者remote desktop或者pcanywhere等方法把

第①步生成的文本文件或者其压缩后的文件传到目的SQL Server数据库,如果有压缩要解压。

③、把文本文件导入目的SQL Server数据库

直接把文本文件导入目的SQL Server数据库里跟文本文件同名的新表名时,默认的会把所有字段类型都变成字符串。

所以我们要这样做:

在源SQL Server数据库上先生成创建表的sql语句

在SQL Server查询分析器里->选中源数据库里表名->按右键->在新窗口中编写对象脚本->创建->复制下新窗口内创建表名的sql语句到目标SQL Server数据库上查询分析器里执行创建表名的sql语句,生成空表结构。(如果已经存在这样的表名,修改建表的sql语句,在表名后面加上导入时间的年月信息,例如table_0113)

调用导入/导出工具->弹出数据转换服务导入/导出向导窗口->下一步->选数据源->数据源(文本文件)->文件名(已传到目的SQL Server数据库下要导入的文本文件,后缀可以不是*.txt,但是常规文本编辑器能打开的文件,文件类型选全部)->下一步->选择文件格式->用默认的带分隔符->选第一行包含有列名称选项->下一步->制定列分割符->逗号->下一步->选择目的->目的(用于SQL Server的Microfost OLE DB提供程序)->服务器(可选择目标局域网内能访问到的所有SQL Server服务器)->选择使用windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)->数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步->选择源表和视图->修改目的表名为刚才创建的表名->转换(在目的表中追加行)->下一步->保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动把文本文件导入,选调度DTS包以便以后执行)->保存(可以不选)-> [保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成

正在执行包->图形界面显示文本文件到表的步骤和状态->完成

如果要更改导入时间的年月信息的表名,例如table_0113到原来的表名,在企业管理器里把原来的表名改成table_old_0113,table_0113改名成table。这会对应用程序里频繁访问的表照成一定的中断。

注意:源表上的建的索引和主键约束不能用上面介绍的1和2方法转移过来,还需要手工来建索引和主键。

标志种子和not null的约束可以继承过来。

导入视图时会把源视图里所有的真实数据导入成一个新表,而不是视图。

三、SQL Server存储过程或用户定义的函数导出导入

1、导出存储过程或用户定义的函数成*.sql文件

在SQL Server企业管理器里选中源数据库,存储过程->单选或者多选中要转移的存储过程->用户定义的函数->单选或者多选中要转移的函数->按鼠标右键,选所有任务->生成SQL脚本->确定->在自己的电脑硬盘中生成一个自定义的*.sql文件->保存->正在生成SQL脚本->成功

2、如果目的数据库经过防火墙,不在同一个局域网里,要通过FTP或者remote desktop或者pcanywhere等方法把第1步生成的*.sql文件传到目的SQL Server数据库服务器上。

3、用查询分析器进入SQL Server目的数据库,从菜单里选文件->打开->打开查询文件->选中第1步生成的*.sql文件->点执行查询的绿色倒三角型快捷键->查询窗口里会出现执行后的消息(有时候可能因为存储过程和用户定义的函数之间有一定的依赖关系,会报一些错。

最好先执行用户定义的函数的*.sql文件,再执行存储过程的*.sql文件)

四、ORACLE数据库里表导入SQL Server数据库

1、在目的SQL Server数据库服务器上安装ORACLE Client软件或者ORACLE ODBC Driver.在$ORACLE_HOME\network\admin\tnsnames.ora里配置ORACLE数据库的别名(service name)。

具体配置方法可以参考本站文章:客户端连服务器的注意事项

2、在WIN2000或者win2003服务器->管理工具->数据源(ODBC)->系统DSN(本机器上NT域用户都可以用)->添加->ORACLE ODBC Driver->完成->data source name可以自定义,我一般填ORACLE数据库的sid标志,description里可以填ORACLE数据库详细描述,也可以不填->data source service name填第1步定义的ORACLE数据库别名->OK。

(用户DSN和文件DSN也可以类似配置,但使用的时候有一些限制)

3、SQL Server的导入和导出数据工具里->选数据源->数据源(其它(ODBC数据源))->选第2步在ODBC里定义的系统DSN source name,用户名密码处填写ORACLE系统的用户名和密码->下一步->选择目的,选SQL Server数据库(跟上面第二点讲的一致,就不重复了)。

注意:在ORACLE表和SQL Server表之间'转换'那步很重要,可以改变默认的字段数据类型,如image->text,decimal->int

五、SQL Server数据库里表导入ORACLE数据库

方法一.导出目的选通过ODBC数据源里定义的ORACLE数据库,注意ORACLE里表名都是大写的.我一般在ORACLE这边先生成好表结构,再选择SQL SERVER源表往ORACLE目的表里追加数据.数据传输速度比方法二慢.

方法二.从SQL Server数据库导入数据到ORACLE数据库可以选择用Windows下ORACLE9i企业或者个人版数据库做中转。

数据库别名的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何导出DB数据库的数据、数据库别名的信息别忘了在本站进行查找哦。

计算机二级数据库考什么 计算机二级数据库,应该考什么calculasian?calculasian什么意思