0.SQL语法
0.1 复制表
select * into <新表名> from <原表名>
0.2 清空表的所有行
TRUNCATE TABLE <表名>
0.3 在游标的当前行上使用 DELETE
DELETE FROM <表名> WHERE CURRENT OF complex_join_cursor
如: 在名为 complex_join_cursor 的游标上所做的删除。它只影响当前从游标提取的单行。
0.4 通过SQL语句访问另一数据库的数据表
select * from
...
如: SELECT * FROM sxserver.sx20050624.dbo.t_Emp
0.5 在当前SQL服务器增加新的SQL服务器
sp_addlinkedserver
如: sp_addlinkedserver sxserver
1.旧DBF如何导入使用SQL2000 ?
答: 使用SQL的DTS功能
参见命令BULK INSERT
2.怎么建主索引(+)----必须用sql?
create table 表名 ( char(4), char(10))
create index 索引名 ON 表名 (,)
3.VFP+SQL数据更新问题?
UPDATE B表
SET 金额=A.金额
FROM B表 LEFT JOIN A表 ON (B.地点=A.地点)
WHERE 条件
4.查询表对象是否存在?
SELECT COUNT(id) as CntId FROM sysobjects WHERE name='DbName'
如果返回CntId值>0,表示对象存在,
这个语句除了可以查表对象是否存在外,
还可能查询视图,索引,触发器,自定义函数是否存在
详细看SQL的联机帮助中对sysobjects 系统表的说明
如: 查询表对象t_Stock是否存在?
if exists (select * from dbo.sysobjects where id = object_id(N't_Stock') and objectproperty(id, N'IsTable') = 1)
print 'ok'
GO
5.什么叫SPT?
直接向SQL发送命令的方式叫SPT
6.忘记了SQL登录密码怎么办?
注册表里将登录方式改为混合登录就可以了hkmachine\system\windowns\mssql\mssql中的logmode登录方式修改一下
7.SQL数据库的联接?
Sql_CommandStr=;
"DRIVER=SQL Server;" +; &;&;SQL的ODBC驱动
"SERVER=SQL实列名;"+;
"NETWORK=DBMSSOCN;"+; &;&;指定为TCP/IP连接方式
"ADDRESS=SQL服务器名或IP;"+;
"UID=SQL用户名;"+;
"PWD=SQL用户密码;" +;
"DATABASE=数据库;" +;
"WSID="+SYS(0)+";" +; &;&;连接用户
"APP="+_Screen.Caption &;&;连接说明
?SQLSTRINGCONNECT(Sql_CommandStr) &;&;成功返回>0的连接句柄
8.获取可用的SQL服务器?
****************************************
* 获取可用的SQL服务器 *
* 1.0 2003.06.06 *
*雅狐论坛 yafox *
****************************************
SQLServerApp = CreateObject("SQLDMO.Application")
SQLServerName = SQLServerApp.ListAvailableSQLServers
SqlServerCount = SQLServerName.Count
If SqlServerCount = 0
? "没有找到可用的 SQLServer 服务器。"
Else
? "可连接的 SQLServer 服务器:"+alltrim(str(SqlServerCount))+"个"
For i = 1 to SqlServerCount
? i, SqlServerName.Item( i)
Next
ENDIF
RELEASE SQLServerApp
****************************************
9.什麽函数可以舍去字符与字符间的空格?
strtran('A B ',' ','')
10.请教,在
程序中如何设定系统时间?
*用WINDOWS API功能:调用SetSystemTime\设置系统日期
*定义
DECLARE INTEGER GetSystemTime IN win32api STRING @
DECLARE INTEGER SetSystemTime IN win32api STRING @
*设置系统日期,时间为:1998,3,2,10:20:10:40
nYear=1998
nMonth=3
nDay=2
nHour=10
nSecond=20
nMinute=10
nMMinute=40
nWeekDay=0
nHour=iif(nHour>8,nHour-8,nHour+24-8)
cBuff=CHR(nYear%256)+CHR(nYear/256));
+Chr(nMonth%256)+Chr(nMonth/256));
+Chr(nWeekDay%256)+Chr(nWeekDay/256);
+Chr(nDay%256)+Chr(nDay/256));
+Chr(nHour%256)+Chr(nHour/256));
+Chr(nSecond%256)+Chr(nSecond/256);
+Chr(nMinute%256)+Chr(nMinute/256);
+CHr(nMMinute%256)+Chr(nMMinute/256);
SetSystemTime(@cBuff)
11.在这问一个关于 VFP6.0 的问题,如何知道 Grid 的表顶记录? 表顶记录是指表格可见的第一条纪录
在表格grid1.mouseup event中加入以下代码:
thisform.grid1.activatecell(1,1)
x=recn()
12.如何在GRID里控制回车事件?
在VFP里,GRID的默认控件都是TEXTBOX,形成了一个表格,但是在这个二维表里进行操作时,每次按回车都是往后一个单元格跳转,当到最后一列时,则继续跳到第一列,进而循环,使操作很不方便,特别是一些要按照DOS的操作习惯的,希望回车时,可以往下移动单元格,或在最后一列回车时回到第一列等操作。
下面说明如何在GRID里的一个列里按回车使记录连续往下跳转(或可以执行其他的操作),当跳转到最后一行时执行另一个操作。
1、对GRID所在的表单新增属性:
cur_recn 记录当前记录号
cur_recc 记录最大记录号
2、在表单初始化,或给GRID以数据源时,就先计算出该表的最大的记录数,如下:
thisform.cur_recc=recc()
为了一次得到当前GRID里的表的记录总数
3、在GRID的AfterRowColChange事件里写:
thisform.cur_recn=recn()
为了得到当前的GRID里的表的记录号
4、在GRID里的某列的TEXT1的KEYPRESS事件里:
if nKeyCode = 13&;&;当按键为回车时
if thisform.cur_recn>=thisform.cur_recc
**--当当前记录大于等于最大记录时,即记录已到最后一个时
thisformmand1.setfocus
**--使表单上的一个命令按纽聚焦,也即可以跳出该GRID,
**--而正常的操作很难从GRID里跳出,在这里就可以使在记录到最后时焦点跳出来
else
thisform.cur_recn=recn()&;&; 当记录还没到尾时,则...
nodefault &;&; 不做任何响应
keyboard "{dnarrow}" &;&; 模拟键盘下箭头,使记录指针下移一个
endif
endif
13.VFP中防止按退格键焦点移到上个控件
在 KeyPress 事件中,写下如下代码:
if nKeyCode = 127 and this.SelStart = 0 and this.SelLength = 0
NoDefault
endif
意思是说,当键盘按了退格键(BackSpace),并且鼠标在文本控件中的选择字符的长度为零,并且光标在控件的最左端时,然后不发生任何事件,也即将原有的默认事件给屏蔽了,那么也就不会使焦点移到上一个控件了!
14.VFP全面控制EXCEL
VFP和Excel都可以用来进行处理数据库表格,如果巧妙地将二者的优点结合起来,将会大大方便我们的工作。比如我们可以利用VFP进行处理数据,而利用Excel的预览打印功能进行报表打印。这就需要我们在VFP中直接来控制Excel。下面就在开发VFP应用项目时对Excel的控制作一下介绍:
1.创建Excel对象
eole=CREATEOBJECT(′Excel.application′)
2.添加新工作簿
eole.Workbooks.add
3.设置第3个工作表为激活工作表
eole.Worksheets(″sheet3″).Activate
4.打开指定工作簿
eole.Workbooks.Open(″c:\temp\ll.xls″)
5.显示Excel窗口
eole.visible=.t.
6.更改Excel标题栏
eole.Caption=″VFP应用程序调用Microsoft Excel″
7.给单元格赋值
eole.cells(1,4).value=XM(XM为数据库字段名)
8.设置指定列的宽度(单位:字符个数)
eole.ActiveSheet.Columns(1).ColumnWidth=5
9.设置指定行的高度(单位:磅)
eole.ActiveSheet.Rows(1).RowHeight=1/0.035
(设定行高为1厘米,1磅=0.035厘米)
10.在第18行之前插入分页符
eole.Worksheets(″Sheet1″).Rows(18).PageBreak=1
11.在第4列之前删除分页符
eole.ActiveSheet.Columns(4).PageBreak=0
12.指定边框线宽度(Borders参数如下)
ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=3
13.设置四个边框线条的类型
eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1
(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)
14.设置页眉
eole.ActiveSheet.PageSetup.CenterHeader=″报表1″
15.设置页脚
eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″
16.设置页眉到顶端边距为2厘米
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035
17.设置页脚到底边距为3厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035
18.设置顶边距为2厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035
19.设置底边距为4厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035
20.设置左边距为2厘米
veole.ActiveSheet.PageSetup.LeftMargin=2/0.035
21.设置右边距为2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035
22.设置页面水平居中
eole.ActiveSheet.PageSetup.Cent
erHorizontally=.t.
23.设置页面垂直居中
eole.ActiveSheet.PageSetup.CenterVertically=.t.
24.设置页面纸张大小(1-窄行8511 39-宽行1411)
eole.ActiveSheet.PageSetup.PaperSize=1
25.打印单元格网线
eole.ActiveSheet.PageSetup.PrintGridlines=.t.
26.拷贝整个工作表
eole.ActiveSheet.UsedRange.Copy
27.拷贝指定区域
eole.ActiveSheet.Range(″A1:E2″).Copy
28.粘贴
eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial
29.在第2行之前插入一行