如何用vfp修改SQL Server的字段?

zzizz 2011-04-29 09:30:00
我的系统是VFP9.0+SQL Server开发的。连接是通过ODBC,主要操作是通过远程视图来实行的。现在有一个Table的字段的长度要改变,因为数据库的表太多了,而且有很多个表里边都有这个这段,所以要用程序来修改。

我的想法就是先打开远程视图中的每一个数据库,然后取得远程视图里边的每个视图的名字,然后存到一个临时表中,取得了视图的名字,也就差不多取得了SQL Server中的每一个Table的名字,这样就可以通过SPT的方法来修改SQL Server的字段了。现在遇到的困难是如何取得远程视图中的每个视图的名字?

请高手指点一下,谢谢!
...全文
197 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWWA 2011-04-29
  • 打赏
  • 举报
回复
现在遇到的困难是如何取得远程视图中的每个视图的名字?
是数据库中的视图的名字?
USE dd.dbc
brow for objecttype='view'
十豆三 2011-04-29
  • 打赏
  • 举报
回复
列举SQL Server中某一数据库中表名

*-----------------------------------
lnsqlhandle=SQLSTRINGCONNECT("driver=SQL Server;server=计算机名;uid=sa;pwd=;database=数据库名")
IF lnsqlhandle<0
MESSAGEBOX('连接失败!',16,'信息提示')
RETURN
ENDIF
lnsucc=SQLTABLES(lnsqlhandle,'TABLE','MyTable') &&'TABLE'必须大写,取得用户表名
*lnsucc=SQLTABLES(lnsqlhandle,'VIEW','MyTable') &&'VIEW'必须大写,取得视图名
*lnsucc=SQLTABLES(lnsqlhandle,'SYSTEM TABLE','MyTable') &&'SYSTEM TABLE'必须大写,取得系统表名
*lnsucc=SQLTABLES(lnsqlhandle,'','MyTable') &&'取得所有表名
if lnsucc<0
MESSAGEBOX('出错了!',16,'信息提示')
RETURN
endif
SELECT MyTable
SCAN
?ALLTRIM(Table_Name)
ENDSCAN

如果想把数库中的表名显示在一个下拉框中
----------------------------------
在表单的INIT事件中:

THISFORM.COMBO1.STYLE=2
THISFORM.COMBO1.ROWSOURCETYPE=6
THISFORM.COMBO1.ROWSOURCE='ALLTRIM(MyTable.Table_Name)'

前提:表单上有控件COMBO1

---------------------------------------------------------------------------------
SELECT name FROM sysobjects WHERE (type = 'U') AND (name <> 'dtproperties')

SELECT name FROM sysobjects WHERE (type = 'V') OR (type = 'P')


type对象类型。可以是下列值之一:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
FN = 标量函数
IF = 内嵌表函数
K = PRIMARY KEY 或 UNIQUE 约束
L = 日志
P = 存储过程
R = 规则
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
V = 视图
X = 扩展存储过程



奇怪的 dtproperties 表
Posted on 2005-11-30 21:50 Zealot 阅读(1228) 评论(3) 编辑 收藏 所属分类: Database
SQL Server 2000中,当新建一个空的数据库后,在查询分析器中执行
sp_database 或select * from sysobjects where xtype = 'U'
都会得到dtproperties表,并显示为用户表, 可这个表我从没有创建过。但是在企业管理器中,dtproperties却显示为系统表。难道是bug ? 查看dtproperties,里面没有数据,是个空表。在SQL Server联机丛书里没有关于这个表的描述。

dtproperties表在企业管理器中无法删除,但在查询分析器中 执行drop table dtproperties却可以删除。
手工建立一个表,表名就叫dtproperties,然后再查看,在企业管理器中赫然显示为系统表!! 看来Bug是一定的了。

重新创建一个数据库, 写个触发器,让其在dtproperties表执行insert时执行,然后在SQL Server里随意操作,hehe,终于发现,在新建关系图时,dtproperties表被插入数据,看来它是用来存储数据关系图的。 呵呵,想点办法,数据关系图以后也可以备份下来了。


再用drop table dtproperties删除表dtproperties,[手工创建dtproperties ,结构任意,] 然后在企业管理器中新建数据关系图,呵呵,SQL Server报错! 再次证实前面的猜想!


SQL Server 2005中dtproperties 表不存在了,取而代之的是sysdiagram (记不住具体的名称了) ,这个bug也不存在了,SQL Server 2005中的系统表和SQL Server 2000有了很大的不同。
十豆三 2011-04-29
  • 打赏
  • 举报
回复
列举SQL SERVER中的数据库名、某一数据库中的表名、某一数据库中表的列名。

*---------------------------------------------------------------

LOCAL loForm
loForm = CREATEOBJECT("Form1")
loForm.Show(1)

DEFINE CLASS Form1 AS Form

Width = 250
Height = 130
MaxButton = .F.
BorderStyle = 2
Caption = "SQL Server"
Server = NULL

ADD OBJECT Label1 AS Label WITH Top = 24, Left = 20, Caption = "Database"
ADD OBJECT Label2 AS Label WITH Top = 54, Left = 20, Caption = "Table"
ADD OBJECT Label3 AS Label WITH Top = 84, Left = 20, Caption = "Column"
ADD OBJECT Combo1 AS ComboBox1 WITH Top = 20, Left = 80, Width = 140, Style = 2
ADD OBJECT Combo2 AS ComboBox2 WITH Top = 50, Left = 80, Width = 140, Style = 2
ADD OBJECT Combo3 AS ComboBox WITH Top = 80, Left = 80, Width = 140, Style = 2

PROCEDURE Init
THIS.Server = CreateObject("SQLDMO.SQLServer")
THIS.Server.Connect("127.0.0.1", "sa", "master")
FOR i = 1 TO THIS.Server.Databases.Count
THIS.Combo1.AddItem(THIS.Server.Databases.Item(i).Name)
ENDFOR
THIS.Combo1.Value = THIS.Combo1.List(1)
THIS.Combo1.InteractiveChange()
ENDPROC

PROCEDURE Destroy
THIS.Server.DisConnect()
ENDPROC

ENDDEFINE

DEFINE CLASS ComboBox1 AS ComboBox
PROCEDURE InteractiveChange
LOCAL loDatabase
loDatabase = THISFORM.Server.Databases(THIS.Value)
THISFORM.Combo2.Clear()
FOR i = 1 TO loDatabase.Tables.Count
THISFORM.Combo2.AddListItem(loDatabase.Tables.Item(i).Name)
ENDFOR
THISFORM.Combo2.Value = THISFORM.Combo2.List(1)
THISFORM.Combo2.InteractiveChange()
ENDPROC
ENDDEFINE

DEFINE CLASS ComboBox2 AS ComboBox
PROCEDURE InteractiveChange
LOCAL loDatabase, loTable
loDatabase = THISFORM.Server.Databases(THISFORM.Combo1.Value)
loTable = loDatabase.Tables(THIS.Value)
THISFORM.Combo3.Clear()
FOR i = 1 TO loTable.Columns.Count
THISFORM.Combo3.AddListItem(loTable.Columns.Item(i).Name)
ENDFOR
THISFORM.Combo3.Value = THISFORM.Combo3.List(1)
ENDPROC
ENDDEFINE

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧