WWW对大量数据查询的一种实现

时间:2022-12-11 05:44:39 作者:第二个号 综合材料 收藏本文 下载本文

“第二个号”通过精心收集,向本站投稿了7篇WWW对大量数据查询的一种实现,下面是小编收集整理后的WWW对大量数据查询的一种实现,供大家参考借鉴,欢迎大家分享。

篇1:WWW对大量数据查询的一种实现

WWW对大量数据查询的一种实现

刘宇雷       钱涛

(南京航空航天大学计算机科学与工程系  南京,210016)

摘要 企业通过WWW服务和数据库技术相结合的办法,构建一种三层客户端/服务器的体系结构,用户通过INTERNET浏览企业信息,但是当浏览大量数据库数据时,网络连接常因速度缓慢或因超时而中断。本文介绍了WWW数据库访问技术,通过对各种技术进行分析和比较,针对新华书店发行集团网站设计的需求,采用ASP技术实现数据的分页传输。

关键词  ASP,ADO,三层体系结构,客户端/服务器,分页

目前,大多数企业通过WWW服务和数据库技术相结合的办法,构建一种三层客户端/服务器的体系结构,即客户端浏览器/中间服务器(WEB服务器)/数据库服务器(B/W/D),利用INTERNET向世界各地发布企业的商业信息。用户为了获得企业的商品信息,通过浏览器访问企业的网站,某些情况下,用户所需的信息量巨大,此时企业的网页传输时间漫长或连接超时,用户因此放弃浏览信息,给企业造成一定的经济损失,这当然不是企业所希望的。为了解决这种大数据量的发布问题,首先了解一下三层体系结构是怎样处理数据库数据的'。

1.   三层体系结构的数据库访问技术

一种通用的三层客户端/服务器体系结构如下图1所示,这种体系结构与传统的二层C/S

结构比较,最大的优点就是将网络通信和数据库操作分离开来,并在客户端和WEB服务器间使用多路复用技术,减轻了数据库服务器CPU的负载,加快数据的处理能力。

篇2:PB中如何实现数据模糊查询

本文主要介绍如何在pb中根据数据窗口中的字段对数据窗口进行模糊查询,本系统的代码示例采用Power Builder6.5进行演示。

代码及设计:

1. 新建一个窗口,命名为w_query。在窗口中放入一个数据窗口控件,命名为dw_master。在dw_master中放入一个数据窗口;放置一个按钮,命名为cb_query。见下图:

2. 新建一个结构(structure)命名为str_result_column,其参数如下:

3. 在dw_master增加两个用户事件,命名为ue_action_query、ue_action_refresh。

4. 在cb_query中增加如下代码:

5. 在窗口的Open事件中增加如下代码:

dw_master.setTransObject(sqlca)

6. 在dw_master的ue_action_query中增加如下代码:

str_result_column lstr_1

//结构str_result_column的成员adw_result指查询结果所产生作用的dw

// 成员adw_column指在本窗口查询条件所要显示的dw

lstr_1.adw_result = this

lstr_1.adw_column = this

OpenWithParm(wroot_dw_query, lstr_1)7. 在dw_master的ue_action_refresh事件中增加如下代码:

dw_master.retrieve

8. 新建一个窗口,命名为wroot_dw_query,该窗口用以进行模糊查询。其设计完成后界面如下所示:

其中“执行”按钮名为“cb_exec”、“返回”按钮名为“cb_exit”、“返回”按钮下的数据窗口名为dw_column,其dataObject为d_column_set、中间的数据窗口名为dw_where,其dataObject为d_where。

9. d_column_set的设计完成界面如下所示:

10. 其sql为:

11. dw_where的设计完成界面如下:

12. 其sql为:

13. 属性和代码如下:

1. wroot_dw_query属性:

X = 9 Y = 1132 Width = 2912 Height = 712

Visible = true Enabled = true TitleBar = true Title = “定位查询”

ControlMenu = true Border = true WindowType = response! WindowState = normal!

BackColor = 79741120

2. 窗口实例变量:

Boolean ib_changed

Long MaxEditRow = 1

String sWhere, oldsql, orisql, is_title, is_section = 'WhereClause'

DataWindow dw_result,dw_detail

pfc_n_cst_string inv_string

string sSyntax

注释:a.pfc_n_cst_string 为PFC用户对象。

3. 窗口事件代码:

3.1 close 事件:

功能:将用户本次所输入的查询条件记录到文件sIniFile的WhereClause1...n小节中去以备下次启动时置初始查询条件。

3.2 open 事件:

功能:设置初始值,具体请看代码中的注释。

integer i, row, li_where_row = 10

string tmp

str_result_column lstr_1

//结构str_result_column的成员adw_result指查询结果所产生作用的dw

// 成员adw_column指在本窗口查询条件所要显示的dw

lstr_1 = Message.PowerObjectParm

dw_result = lstr_1.adw_result

dw_detail = lstr_1.adw_column

if isnull(dw_result) or not isvalid(dw_result) then return

if isnull(lstr_1.adw_column) or not isvalid(lstr_1.adw_column) then return

window act_w

act_w=MainWindow.getactivesheet()

x = act_w.x + 8

y = act_w.y + act_w.height - height+258

width = act_w.width

cb_exec.x=width - cb_exec.width -80

cb_exit.x=width - cb_exec.width -80

dw_where.x=10

dw_where.Width = width - 2 * dw_where.X - cb_exec.width -100

//-----s

dw_column.visible = False

wf_setcolumn(lstr_1.adw_column, dw_column)

//orisql = dw_result.Object.DataWindow.Table.Select //原始语法,close中用.

orisql = dw_result.GetSqlSelect() //上句对CrossTab无效

oldsql = lower(orisql)

For i = 1 to li_where_row

dw_where.InsertRow(0)

Next

dw_where.setrowfocusindicator(Hand!)

dw_where.ScrollToRow(0)

dw_where.SetColumn(“column1”)

cb_exec.SetFocus()

datawindowchild dwc

dw_where.GetChild(“column1”,dwc)

dwc.SetTransObject(sqlca)

dwc.Reset()

For i = 1 to dw_column.RowCount()

tmp = dw_column.GetItemString(i,1)

row = dwc.InsertRow(0)

dwc.SetItem(row,1,tmp)

Next

//将用户上次所输入的查询条件从文件sIniFile的WhereClause1...n小节中取出来,

//本次启动时置为初始查询条件.

window w_parent

if dw_result.GetParent().typeof() = window! then

w_parent = dw_result.GetParent()

is_title = w_parent.title

else

is_title = dw_result.DataObject

end if

ib_changed = True

row = 0

tmp = ''

is_title = gnv_app.is_regkey + '\' + is_title + '\' + scname

For i = 1 to li_where_row

RegistryGet(is_title, is_section + String(i), RegString!, tmp)

//tmp = ProfileString(sinifile,is_title,“WhereClause” + string(i),“”)

if tmp “” and (Not IsNull(tmp)) then

//SetProfileString(sinifile,is_title,“WhereClause” + string(i),“”)

RegistrySet(is_title, is_section + String(i), RegString!, '')

row ++

dw_where.object.data[row,1] = inv_string.of_gettoken(tmp, “,”)

dw_where.object.data[row,2] = inv_string.of_gettoken(tmp, “,”)

dw_where.object.data[row,3] = inv_string.of_gettoken(tmp, “,”)

dw_where.object.data[row,4] = inv_string.of_gettoken(tmp, “,”)

dw_where.object.data[row,5] = inv_string.of_gettoken(tmp, “,”)

dw_where.object.data[row,6] = inv_string.of_gettoken(tmp, “,”)

end if

Next

MaxEditRow = row // MaxEditRow 为dw_where中当前已编辑过的最大行的行号.实例变量.

If MaxEditRow = 0 Then MaxEditRow = 1

4. 函数:

4.1 public function string wf_getywname (string hzname)函数

功能:返回“表名.列名”,如“department.d_id”。

4.2 public function string wf_getywtype (string hzname)函数

功能:返回列类型。

注释:

(1) f_getoken()函数代码如下:

4.3 public function string wf_dateconvert (string svalue)函数

功能:见程序中注释。

string syear,smonth,sday

date idate

idate = date(svalue)

syear = string(year(idate))

smonth = string(month(idate))

sday = string(day(idate))

svalue = syear + “-” + smonth + “-” + sday

return svalue

end function

public function string wf_datetime (string inputvalue)

inputvalue = trim(inputvalue)

integer position

string bef,aft

/* bef 为日期,aft为时间*/

position = pos(inputvalue,“ ”)

if position = 0 then inputvalue += “ 00:00:00”

position = pos(inputvalue,“ ”)

if position = 0 then

return “error”

else

bef = left(inputvalue , position - 1)

aft = right(inputvalue,len(inputvalue) - position)

if (not isdate(bef)) or (not istime(aft)) then

return “error”

end if

end if

//bef = wf_dateconvert(bef)

//return bef + “ ” + aft

string syear,smonth,sday

date idate

idate = date(bef)

syear = string(year(idate))

smonth = right('00'+string(month(idate)),2)

sday = right('00'+string(day(idate)),2)

return syear+smonth+sday

end function

public subroutine wf_setcolumn (datawindow dw_1, datawindow dw_2)

pfc_n_cst_string lnv_string

String scol, stable_col

String shz, syw, stype, stable

Integer i, row

If Not IsValid(dw_1) Then Return

If Not IsValid(dw_2) Then Return

dw_2.ReSet()

For i =1 To long(dw_1.Object.DataWindow.Column.Count)

scol = dw_1.Describe(“#” + String(i) + “.Name”) //列名(可变)

stable_col = dw_1.Describe(scol + “.dbName”) //所在表.列名(OK)

stable = lnv_string.of_gettoken(stable_col,“.”) //所在表

syw = stable_col //列名(不变.OK) 本文来自bianceng.cn(编程入门)

shz = trim(dw_1.Describe(scol + “_t.Text”)) //中文名

stype = dw_1.Describe(scol + “.ColType”) //列类型

if dw_1.Describe(scol + “.Type”) = “column” &

and shz “!” and shz “?” then

shz = lnv_string.of_globalreplace(shz,“'”,“”) //去掉单引号

shz = lnv_string.of_globalreplace(shz,'“','') //去掉双引号

shz = lnv_string.of_globalreplace(shz,”~r~n“,”_“) //去掉换行符

shz = lnv_string.of_globalreplace(shz,” “,”_“) //去掉空格

shz = lnv_string.of_globalreplace(shz,”:“,”“) //去掉冒号

shz = lnv_string.of_globalreplace(shz,”:“,”“) //去掉冒号

row = dw_2.InsertRow(0)

dw_2.object.data[row,1] = shz

dw_2.object.data[row,2] = syw

dw_2.object.data[row,3] = stype

dw_2.object.data[row,4] = stable

end if

Next

4.4 public function long wf_min (long a, long b, long c)函数

功能:给定三个数a,b,c, 如果a,b,c均为0, 则返回0;否则,返回a,b,c中不为0的数中的最小值.例1: a = 0, b = 0, c = 0 ,则返回0。例2: a = 0, b = 2, c = 6 ,则返回2。例3: a = 9, b = 0, c = 0 ,则返回9。

5. StaticText: st_1属性:

X = 46 Y = 32 Width = 466 Height = 64

TabOrder = 0 Visible = true Text = ”请输入查询条件: “ TextColor = 0

BackColor = 80269524 Alignment = left! FillPattern = solid!

6. CommandButton: cb_exit属性:

X = 2578 Y = 376 Width = 256 Height = 108

TabOrder = 30 Visible = true Enabled = true Text = ”&F.返回“

Cancel = true

6.1 CommandButton: cb_exit的 clicked 事件:

功能:直接退出。

Close(parent)

7. CommandButton: cb_exec属性:

X = 2578 Y = 204 Width = 256 Height = 108

TabOrder = 20 Visible = true Enabled = true Text = ”&Z.执行“

Default = true

7.1 CommandButton: cb_exec的 clicked 事件:

功能:设置组和sql语法。

注释:

(1).n_cst_sql、n_cst_sqlattrib为PFC中用户对象,这里不再详述。

8. DataWindow: dw_column属性:

X = 2578 Y = 536 Width = 69 Height = 60

TabOrder = 10 Visible = true Enabled = true DataObject = ”d_column_set“

Border = true LiveScroll = true BorderStyle. = stylebox

9. DataWindow: dw_where属性:

X = 46 Y = 120 Width = 2459 Height = 448

TabOrder = 40 Visible = true Enabled = true DataObject = ”d_where“

VScrollBar = true Border = true BorderStyle. = stylelowered!

9.1 DataWindow: dw_where的 editchanged 事件:

功能:设置”执行“按钮是否有效,

9.2 DataWindow: dw_where的itemchanged 事件:

功能:见代码中的注释。

string colname,colvalue, logvalue

long currow

ib_changed = true

cb_exec.Enabled = True

currow = GetRow()

If MaxEditRow < Currow Then MaxEditRow = currow

// MaxEditRow 为当前已编辑过的最大行的行号。实例变量。

colname = GetColumnName()

colvalue = GetItemString(currow,colname)

Choose Case dwo.name

Case 'dispvalue'

Object.value[row] = data

Case Else

End Choose

//设置当前行的operator的初始值为”=“

//设置上一行的logical的初始值为”and“

if colname = ”column1“ then

if colvalue = ”“ or isnull(colvalue) then

SetItem(currow,”operator“,”=“)

if currow >= 2 then

colvalue = GetItemString(currow - 1,colname)

logvalue = GetItemString(currow - 1,”logical“)

if colvalue ”“ and (logvalue = ”“ or isnull(logvalue)) then

SetItem(currow - 1,”logical“,”and“)

end if

end if

end if

end if

//检查并设置左括号。

long ll, i

colvalue = GetText()

if colname = ”precol“ then

if colvalue ”“ and not isnull(colvalue) then

ll = len(colvalue)

colvalue = ”“

For i = 1 to ll

colvalue += ”(“

Next

SetItem(currow,”precol“,colvalue)

this.Settext(colvalue)

Return 2

end if

end if

9.3 DataWindow: dw_where的losefocus 事件:

AcceptText()

9.4 DataWindow: dw_where的rbuttondown 事件:

功能:设置弹出式菜单。

注释:

(1) m_cpq_rbutton_paste菜单的属性和代码如下:

1.MenuItem = m_1 ”a1“

Visible = true Enabled = true

2.MenuItems for m_1

MenuItem = m_value ”&V.取现有值“

Visible = true Enabled = true

3.Script. for: nt clicked event

long ll_pos

String sSyntax,ls_parm,ls_data,ls_disp

datawindow dwp

dwp = Message.PowerObjectParm

sSyntax = Message.StringParm

if sSyntax = ”“ or isNull(sSyntax) then

beep(3)

return

end if

OpenWithParm(w_paste,sSyntax) //w_paste为响应式窗口

ls_parm = Message.StringParm

if ls_parm ”cancel“ then

ll_pos = Pos ( ls_parm,'/')

If ll_pos = 0 Then

ls_data = ls_parm

ls_disp = ls_parm

Else

ls_data = Left ( ls_parm , ll_pos - 1 )

ls_disp = Mid ( ls_parm , ll_pos + 1 )

End If

dwp.SetItem(dwp.GetRow(),”value“,ls_data)

dwp.SetItem(dwp.GetRow(),”dispvalue“,ls_disp)

dwp.AcceptText()

end if

5. MenuItem = m_clear ”&D.清除本列“

Visible = true Enabled = true

6. Script. for: clicked event

datawindow dwp

dwp = Message.PowerObjectParm

dwp.DeleteRow(0)

dwp.InsertRow(0)

End of Script

MenuItem = m_return ”&N.返回“

Visible = true Enabled = true

9.5 DataWindow: dw_where的 ue_where 事件

功能:形成WHERE子句,并更新语法框。

string hzcol, ywcol, sValue, sType //, sWhere

//sWhere 现为实例变量,在wroot_query中为局部变量.

string sOper, sLog, sLeft_kh,sRight_kh, tmpsValue

long left_kh,right_kh //左、右括号数

integer i, rownum, delnum //, typenum

dwItemStatus l_status

if ib_changed = true then

ib_changed = false

else

return 0

end if

rownum = dw_where.RowCount()

//去掉dw_where中MaxEditRow行以前所有中间为空或

//者输入不完整的行, 并更新MaxEditRow.

i = 1

delnum = 0

DO WHILE i <= MaxEditRow

l_status = dw_where.GetItemStatus(i,0, Primary!)

if l_status New! then

hzcol = GetItemString(i,”column1“)

sValue = GetItemString(i,”value“)

if (hzcol = ”“ or isnull(hzcol)) or (sValue = ”“ or isnull(sValue)) then

dw_where.DeleteRow(i)

delnum += 1

MaxEditRow += -1

Continue

end if

else

dw_where.DeleteRow(i)

delnum += 1

MaxEditRow += -1

Continue

end if

i += 1

LOOP

For i = 1 to DelNum

dw_where.InsertRow(0)

Next

//检查左右括号是否匹配, 即其数量是否一样多.

For i = 1 to MaxEditRow

l_status = dw_where.GetItemStatus(i,0, Primary!)

if l_status New! then

left_kh += inv_string.of_countoccurrences(GetItemString(i,”precol“),”(“)

right_kh += inv_string.of_countoccurrences(GetItemString(i,”value“),”)“)

end if

Next

i = left_kh - right_kh

if i 0 then

if i >0 then

sValue = ”查询条件中左括号比右括号多了“ + String(i) + ”个“

else

sValue = ”查询条件中左括号比右括号少了“ + String(-i) + ”个“

end if

if MessageBox(”综合查询输入错误“,sValue + ”,请改正;“ + &

”~r~n~r~n否则,所有查询条件将被忽略。“,None!,OKCancel!,2)=1 then

return 1

else

dw_where.setfocus()

return 0

end if

end if

//形成WHERE子句,并更新语法框。

sWhere = ”“

For i = 1 to MaxEditRow

hzcol = GetItemString(i,”column1“)

sOper = space(1) + GetItemString(i,”operator“) + space(1)

// 去掉空格键

sValue = Trim(GetItemString(i,”value“))

sLeft_kh = GetItemString(i,”precol“) //保存左括号

if isNull(sLeft_kh) then sLeft_kh = ”“

if Pos(sValue,”)“,1) >0 then //保存右括号

sRight_kh = Right(sValue,(Len(sValue) - Pos(sValue,”)“,1) + 1))

else

sRight_kh = ”“

end if

sValue = inv_string.of_globalreplace(sValue,”'“,”“) //去掉sValue中的单引号.

sValue = inv_string.of_globalreplace(sValue,'”','') //去掉sValue中的双引号.

sValue = inv_string.of_globalreplace(sValue,“)”,“”) //去掉sValue中的右括号.

sLog = GetItemString(i,“logical”)

if sLog = “” or isNull(sLog) then

sLog = “and”

dw_where.SetItem(i,“logical”,“and”)

end if

ywcol = wf_getYwName(hzcol) //表名.列名

sType = lower(wf_getYwType(hzcol))

CHOOSE CASE sType

CASE “char”,“character”,“string”,“nchar”,“nvarchar”,“varchar”,“time”

if trim(sOper) = “like” or trim(sOper) = “not like” then

sWhere += “ (” + sLeft_kh + ywcol + sOper + “'%” + sValue + “%') ” + sRight_kh + sLog

else

sWhere += “ (” + sLeft_kh + ywcol + sOper + “'” + sValue + “') ” + sRight_kh + sLog

end if

CASE “numeric”,“decimal”,“decimaln”,“dec”,“double”,“integer”,“int”,“smallint”,&

“number”,“long”,“real”,“uint”,“ulong”,“unsignedint”,“unsignedinteger”,“unsignedlong”

if trim(sOper) = “like” or trim(sOper) = “not like” then

if MessageBox(“提示信息”,hzcol + “不是字符型,不能使用<含有>或<不含有>操作符,” + &

“~r~n~r~n请改正; 否则,所有查询条件将被忽略。”,None!,OKCancel!,2)=1 then

return 1

else

dw_where.setfocus()

return 0

end if

end if

if isNumber(sValue) then

sWhere += “ (” + sLeft_kh + ywcol + sOper + sValue + “) ” + sRight_kh + sLog

else

if MessageBox(“综合查询输入错误”,hzcol + “的值应为数字型,请改正;” + &

“~r~n~r~n否则,所有查询条件将被忽略。”,None!,OKCancel!,2)=1 then

Return 1

else

dw_where.setfocus()

return 0

end if

end if

CASE “date”,“datetime”,“datetimn”,“smalldatetime”,“timestamp”

if trim(sOper) = “like” or trim(sOper) = “not like” then

if MessageBox(“提示信息”,hzcol + “不是字符型,不能使用<含有>或<不含有>操作符,” + &

“~r~n~r~n请改正; 否则,所有查询条件将被忽略。”,None!,OKCancel!,2)=1 then

return 1

else

dw_where.setfocus()

return 0

end if

end if

if sType = “date” then

if not isdate(sValue) then

if MessageBox(“综合查询输入错误”,hzcol + “的值应为日期型,请改正;” + &

“~r~n~r~n否则,所有查询条件将被忽略.”,None!,OKCancel!,2)=1 then

Return 1

else

dw_where.setfocus()

return 0

end if

end if

sValue = wf_dateconvert(sValue)

sWhere += “ (” + sLeft_kh + ywcol + sOper + “'” + sValue + “') ” + sRight_kh + sLog

else

//datetime型的字段在sybase中转换为字符串的类型

sValue = wf_datetime(sValue)

if sValue = “error” then

if MessageBox(“综合查询输入错误”,hzcol + “的值应为日期时间型,请改正;” + &

“~r~n~r~n否则,所有查询条件将被忽略。”,None!,OKCancel!,2)=1 then

Return 1

else

dw_where.setfocus()

return 0

end if

end if

sWhere += “ (” + sLeft_kh + “convert(varchar(8),”+ywcol+“,112)” + sOper + “ '”+sValue+“') ” + sRight_kh +

sLog

end if

CASE ELSE

beep(1)

MessageBox(“综合查询”,sType + “这个数据类型未在本模块中定义。”)

Return 0

END CHOOSE

Next

//去掉最后一个逻辑符。

Long pok, pp

pp = 0

DO WHILE True

pok = pp

pp = Pos(sWhere, “)”, pp + 1)

if pp = 0 then Exit

LOOP

if pok >0 then sWhere = Trim(Left(sWhere, pok))

return 1

//最后一个逻辑符去掉结束.

//至此, 用户的WHERE语句部分已经形成完毕于sWhere中.

9.6 DataWindow: dw_where的 ue_mousemove 事件

功能:控制鼠标的移动。

string s_object

s_object = This.GetObjectAtPointer()

if left(s_object,5) = “value” then

MainWindow.SetMicroHelp(“此时按鼠标右键可粘贴现有值”)

else

MainWindow.SetMicroHelp(“准备好”)

end if

9.7 DataWindow: dw_where的ue_retrieve事件

功能:对数据窗口进行查询,详细请见代码。

// 如果数据窗口dw_result上并无ue_action_refresh事件,

// 则用户必须重载本事件,编写自己的脚本.

// 如:

// dw_result.retrieve()

//

// 或者如果数据窗口dw_result有retrieve参数,

// 则用户也必须重载本事件,编写自己的脚本.

// 如:

// string ls_id

// ls_id = ...

// dw_result.retrieve(ls_id)

dw_result.triggerevent(“ue_action_refresh”)

篇3:MySQL导大量数据的程序实现方法

大家一定使用过 phpmyadmin 里面的数据库导入,导出功能,非常方便,但是在实际应用中,我发现如下几个问题:

1、数据库超过一定尺寸,比如6M 这时使用导出一般没问题,可以正确的保存到本机硬盘上面,但是导入则不行!原因是:一般的 PHP.INI 里面设置临时文件/上传文件的大小限制为2M,而phpmyadmin使用了上传的方式,造成失败。

2、导出到硬盘的 .SQL 文件在导回时,经常出现由于某些单引号的问题引起失败,造成导入失败,只能用 mysql等应用程序导入了。

我的数据库已经超过10M,所以必须解决这个问题。我的思路:

导出: 用phpmyadmin 保存数据库/表格结构,用脚本读取数据库内容并保存到文件里面!

导入: 用phpmyadmin 恢复数据库/表格结构,用脚本读取文件,然后保存到库里面!

导出程序如下:调用方法为 ****.php?table=tablename

这个简单的程序目前一次保存一个表格!!每行为一个字段的数据!!

if($table==“”)exit();

mysql_connect(“localhost”,“name”,“password”);

mysql_select_db(“database”);

$result = mysql_query(“select * from $table”);

if(mysql_num_rows($result) <= 0) exit();

echo “开始转换数据到文本...

”;

$handle = fopen(“$table.txt”,“w”);

$numfields = mysql_num_fields($result);

fputs($handle,$numfields.“/r/n”);

for($k=0;$k

{

$msg = mysql_fetch_row($result);

for($i=0;$i<$numfields;$i++)

{

$msg[$i] = str_replace(“/r/n”,“&&php2000mysqlreturn&&”,$msg[$i]);

$msg[$i] = str_replace(“/n” ,“&&php2000mysqlreturn&&”,$msg[$i]);

fputs($handle,$msg[$i].“/r/n”);

}

fputs($handle,“------- php2000 dump data program V1.0 for MySQL --------/r/n”);

}

fclose($handle);

echo “ok”;

?>

导入的程序如下:用法同上面!

if($table==“”)exit();

mysql_connect(“localhost”,“name”,“password”);

mysql_select_db(“database”);

$message = file(“$table.txt”);

echo $numfields = chop($message[0]);

for($k=1;$k

{

$value=“”;

for ($i=$k;$i<($k+$numfields-1);$i++)

{

$tmp = str_replace(“&&php2000mysqlreturn&&”,“/r/n”,chop($message[$i]));

$value .= “'”.addslashes($tmp).“',”;

}

$tmp = str_replace(“&&php2000mysqlreturn&&”,“/r/n”,chop($message[$k+$numfields-1]));

$value .= “'”.$tmp.“'”;

$query = “insert into $table values (”.$value.“)”;

echo mysql_error();

mysql_query($query);

echo $k.“ ”;

}

echo “ok”;

?>

使用方法和可能的问题!

1、导入时 file()函数可能会有问题(我的10M的数据没出现问题),可以改为 fopen()然后没次读一行!!

2、导入,导出都需要用 ftp 操作,也就是导出后,用 ftp 把数据转到本机,导入时先用ftp转移数据到服务器!

篇4:用ADO对Excel的数据查询数据库教程

ado|excel|数据

ASP对Excel的基本操作之查询数据

Execl97/2000/xp是MS Office办公软件的成员之一,在企业级应用当中,我们往往需要对Execl进行操作,如读取Execl里面的数据、往Execl里插入数据等。

一、操作Execl要注意的事项:

1、 服务器端Office的配置

以MS Windows2000+IIS为例,要在服务器端安装有MS Office的成员之一Execl,Office的版本没有特殊要求。

2、 服务器端分布式COM的配置

执行“ DCOMCNFG”命令,选择“应用程序”页的“Microsoft Execl 应用程序”―>“属性”―>“安全性”―>三个选项都选“使用自定义访问权限”,添加“Everyone”权限。

二、首先,先将利用ASP读取Execl的数据(不建立DSN):

我们可以整个.xsl文件看作是一个数据库,sheet1、sheet2等分别看成一个独立的表,把A1、B1、C1、…N1看作表的字段。

--建立连接对象实例ExeclConn

Set ExeclConn=Server.CreateObject(“ADODB.Connection”)

--利用Open 方法打开数据库

StrConn=“Driver={Microsoft Excel Driver (*.xls)};”&_

“DriverId=790; DBQ=”& Server.MapPath(“xls文件名”)

conn.Open StrConn

--建立数据集对象Rs并查询数据

Set Rs = Server.CreateObject(“ADODB.Recordset”)

Sql=“select * from [Sheet1$]”

rs.Open Sql,conn,2,2

具体例子:

1、建立一个表Sheet1(数据库名为Students)

StudentID

姓 名

语 文

数 学

物 理

化 学

地 理

1

李雪青

83

84

76

95

66

2

冯江

87

96

82

100

81

3

吴小霞

76

43

37

60

82

4

邹亚汇

80

77

63

71

63

5

蔡海飞

89

63

92

86

67

2、查询并显示表Sheet1内容的代码

<%

Dim conn

Dim StrConn

Dim rs

Dim Sql

Set conn=Server.CreateObject(“ADODB.Connection”)

StrConn=“Driver={Microsoft Excel Driver (*.xls)};”&_

“DriverId=790; DBQ=”& Server.MapPath(“Students.xls”)

conn.Open StrConn

Set rs = Server.CreateObject(“ADODB.Recordset”)

Sql=“select * from [Sheet1$]”

rs.Open Sql,conn,2,2

%>

<%

for i=0 to rs.Fields.Count-1

%>

<%=rs(i).Name%>

<%

next

%>

<%

do while Not rs.EOF

%>

<%

for i=0 to rs.Fields.Count-1

%>

<%=rs(i)%>

<%

next

%>

<%

rs.MoveNext

Loop

rs.close

set rs=nothing

StrConn.close

set StrConn=nothing

%>

3、运行结果

篇5:在数据窗口中实现某一列的增量查询功能.net

在PB的数据窗口中怎样实现某一列的增量查询功能,就是说在单行编辑器控件中每输入一个字符,数据窗口能找到这一列值左边部分与单行编辑器中内容相等的行,并加亮显示, 要完成上述增量查询功能,实现的关键有两点:一是单行编辑器能实时响应键盘的输入,捕捉

在PB的数据窗口中怎样实现某一列的增量查询功能,就是说在单行编辑器控件中每输入一个字符,数据窗口能找到这一列值左边部分与单行编辑器中内容相等的行,并加亮显示。

要完成上述增量查询功能,实现的关键有两点:一是单行编辑器能实时响应键盘的输入,捕捉每一个按键,获得其中的文本;二是数据窗口的模糊查询功能,即能够找到列ID左边文本与单行编辑器文本相等的行,这可以用“like”来实现。

下面给出具体方法:

1.定义单行编辑器的用户事件ue_enchange,事件的ID为:pbm_enchange。这个事件能响应键盘的输入。

2.在单行编辑器的ue_enchange事件中编写如下脚本:

long ll_found_row

string ls_find

ls_find = ″string(id) like ″ + ″′″ + this.text + ″%′″ //查找条件(左部分与单行编辑器文本相等)

ll_found_row = dw_name.Find(ls_find, 1, dw_name.RowCount) //查找符合条件的行

if ll_found_row <= 0 then return

dw_name.ScrollToRow(ll_found_row) //滚动到相匹配的行

dw_name.SelectRow(0 , false)

dw_name.SelectRow(ll_found_row , true) //将匹配行加亮显示

原文转自:www.ltesting.net

篇6:用VC++实现对波形数据的频谱分析.net

郎锐 频谱分析是电子工程上一个非常重要的分析手段,许多计算机辅助电路分析(CAA)类软件都具备这种分析能力,以便电子工程师能清楚地看到某波形的频谱分布情况,要对一个输入信号源作频谱分析,将其由时域信号转变为频域信号,就必然要用到傅立叶变换。 这

郎锐

频谱分析是电子工程上一个非常重要的分析手段,许多计算机辅助电路分析(CAA)类软件都具备这种分析能力,以便电子工程师能清楚地看到某波形的频谱分布情况。要对一个输入信号源作频谱分析,将其由时域信号转变为频域信号,就必然要用到傅立叶变换。这样,无论是在时域还是在频域,都要对连续函数进行积分运算。很显然,要通过计算机实现这种变换就需要预先通过抽样将原始的连续数据转变为离散数据,并将计算范围收缩到一个有限区间。因此,在允许一定程度近似的条件下,可以使用“离散傅立叶变换(DFT)”对波形数据进行频谱分析。

算法构成原理

要计算一个N点的离散傅立叶变换需要同一个N×N点的W矩阵(关于W矩阵请参阅信号与系统方面或数学方面的书籍)相运算,随着N值的增大,运算次数显著上升,当点数达到1024时,需要进行复数乘法运算1048576次。显然这种算法在实际运用中无法保证当点数较大时的运算速度,无法满足对信号的实时处理要求。

根据W矩阵中W元素的周期性和对称性我们可以将一个N点的DFT运算分解为两组N/2点的DFT运算,然后取和即可。为进一步提高效率,将上述两个矩阵按奇偶顺序逐级分解下去。当采样点数为2的指数次方M时,可分解为M级子矩阵运算,全部工作量如下:

复数乘法:M×N/2次

复数加法:N×M次

直接采用DFT算法需要的运算量为:

复数乘法:N×N次

复数加法:N×(N-1)次

当点数N为几十个点时快速傅立叶交换(FFT)的优势还不明显,而一旦N达到几千时优势是十分明显的:

N=1024时:DFT需1048576次运算,FFT仅需5120次运算,改善比为204.8。

N=2048时:DFT需4194304次运算,FFT仅需11264次运算,改善比达到372.4。

当采样点数较多时,如变换前和变换后的序列都按自然顺序排列,则中间运算过程会占用大量的中间存储单元,造成效率的低下和存储单元的浪费。根据FFT的实现原理我们可以对采样序列进行逐次奇偶抽选,打乱以前的次序重新排序,然后按此顺序参加运算,以“即位运算”提高存储单元的利用率。

复数的描述方法

进行傅立叶变换时不可避免地要用到复数,而在VC中并没有现成的可用于表示复数的数据类型,因此需要自己定义一个含有两个成员变量的数据结构来表示复数,这两个成员变量可分别用于表示复数的实部与虚部:

typedef struct tagComplex{

//复数的实部

float Re;

//复数的虚部

float Im;

}Complex;

倒序的实现

在进行快速傅立叶变换时,可以将输入的时域序列和输出的频域序列都按照自然顺序排列;也可以按照“蝴蝶图”所描述的计算方法对输入的时域序列按奇偶分解后的序列排序,而输出的频域序列仍是按自然顺序排列;还有一种方式是输入的时域序列是自然序列,而输出的频域序列则是按奇偶分解后的顺序排列。这三种方式各有优缺点:第一种对输入、输出不需要进一步排序,但由于自然排序不符合“蝴蝶图”运算规律,会占用大量中间存储单元;而后两种则无需中间存储单元,但需要倒序。权衡利弊,当采样点较多时还是采用后两种方式好,多一次倒序运算对现在的高性能计算机而言并不是什么负担。下面代码用于对原始采样序列的时间抽选奇偶分解工作,其中A、N分别表示指向采样序列复数数组的指针和序列的长度。

int NV2=N/2;

int NM1=N-1;

int I,J,K=0;

//用于中介的复数变量T

Complex T;

I=J=1;

while(I<=NM1)

{

if(I< J)

{

//借助于中间变量T,将A[J-1]的内容和A[I-1]的内容互换

T=A[J-1];

A[J-1]=A[I-1];

A[I-1]=T;

}

K=NV2;

while(K< J)

{

J-=K;

K/=2;

}

J+=K;

I++;

}

时域信号的频谱分析

首先要将从外设输入或采集的时域波形数据经抽样量化后,通过CFile类的Open(……)、Read(……)等成员函数将其读取到缓存中,并将其转化为复变量存放于复变量数组A中。同时需要验证数据量的长度是否为2的整数次幂,如不是则用0来补齐,否则无法用“蝴蝶图”进行分解运算。下面代码用于完成对原始采样时域序列的快速傅立叶变换,A、M分别表示指向原始采样数据数组的指针和序列长度的2的整数次幂:

……

Complex U,W,T;

int LE,LE1,I,J,IP;

int N=(int)pow(2,M);

//由于采用时间抽选奇偶分解方式,所以在参加运算前首先要对时间序列进行倒序

ReverseOrder(A,N);

int L=1;

while(L<=M)

{

LE=(int)pow(2,L);

LE1=LE/2;

U.Re=1.0f;

U.Im=0.0f;

//计算W算子的值

W.Re=(float)cos(PI/(1.0*LE1));

W.Im=(float)-1.0*sin(PI/(1.0*LE1));

if(abs(W.Re)<1.0e-12)

W.Re=0.0f;

if(abs(W.Im)< 1.0e-12)

W.Im=0.0f;

J=1;

while(J<=LE1)

{

I=J;

while(I<=N)

{

IP=I+LE1;

//复数运算A×U

T.Re=(float)A[IP-1].Re*U.Re-A

[IP-1].Im*U.Im;

T.Im=(float)A[IP-1].Re*U.Im+A

[IP-1].Im*U.Re;

//复数运算A-T

A[IP-1].Re=(float)A[I-1].Re-

T.Re;

A[IP-1].Im=(float)A[I-1].Im-

T.Im;

//复数运算A+T

A[I-1].Re+=T.Re;

A[I-1].Im+=T.Im;

I+=LE;

}

float temp=U.Re;

//复数运算U×W

U.Re=(float)U.Re*W.Re-U.Im*

W.Im;

U.Im=(float)temp*W.Im+U.Im*

W.Re;

J++;

}

L++;

}

……

上述代码执行完毕时,原先存放着时域数值的复变量数组内存放的就是经过分析后的频域值,利用此数据可以通过绘图将频域波形直观地显示出来,也可以将其存成数据文件,以备进一步使用,

测试及运算结果分析

编译运行程序,分析一个三角脉冲的数据文件,并保存分析结果。该三角脉冲幅度为1,持续时间2毫秒,抽样时间间隔是20微秒,延拓周期(数据记录长度)为10毫秒,采样点数为500,取2的整数次幂512个采样点。下附该三角脉冲频谱的计算结果及误差分析:

频率(Hz) FFT求得 X(f) 误差

0.00 1.00006E-03 1.00000E-03 6.10352E-08

100.00 9.67593E-04 9.67531E-04 6.14332E-08

200.00 8.75203E-04 8.75150E-04 6.25092E-08

300.00 7.36904E-04 7.36849E-04 6.39413E-08

400.00 5.72852E-04 5.72787E-04 6.52926E-08

500.00 4.05351E-04 4.05285E-04 6.61362E-08

600.00 2.54638E-04 2.54572E-04 6.61847E-08

……

2700.00 9.16539E-06 9.09679E-06 6.86075E-08

2800.00 4.53216E-06 4.46500E-06 6.71550E-08

2900.00 1.21487E-06 1.15945E-06 6.44190E-08

注:此处FFT运算结果都乘以了系数10毫秒(0.01秒)。

从上述数据中可以看出,在分析结果中产生了误差。这是由于待分析的连续时间信号不具备离散性或周期性,也可能有无限长度。为了适应FFT方法的需要,先对波形进行了抽样和截断,这样再用程序分析采样数据必然会引起误差。从分析结果还可以看出,频率越高,误差波动也越大,此分析结果产生的误差在允许范围之内,是一个可以允许的近似。

本程序在Windows98、Microsoft Visual C++ 6.0下编译通过。

原文转自:www.ltesting.net

篇7:Visual C++中实现对图像数据的读取显示

在利用VC进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取出来并显示,图像数据与文本字段不同,它是作为OLE字段在数据库中存储,通过数据集对象的成员变量自动交换得到的图像数据,得到的数据并不能直接显示,如何处理图像数据,一直是数据库编程中的一个难点,目前关于VC进行数据库编程的资料不少,但很少涉及图像数据的操作,笔者针对一现状,结合自己开发的一个项目,解决了如何显示数据库中的图像这一问题,本文以操作ACESS数据库为例子,讲解一下自己的实现思路,希望对爱好VC编程的朋友们有所帮助,以起到抛砖引玉的作用,

为了简化问题,该数据库的表中只有一个名为Images的OLE字段,我使用DAO连接操作数据库,读取的图像数据显示在一个对话框上,至于使用ODBC、DAO还是ADO,这要根据具体情况而定,但无论使用哪一种,对图像的显示来说,实现的过程是大同小异的。由于篇幅有限,文章中对如何实现数据库的连接不再作具体的说明,有兴趣的读者朋友可以参考VC数据库编程的资料。实现过程中,首先定义一个CDaoRecordset的子类 CimageData如下:

class CimageData : public CDaoRecordset

{

public:

CimageData (CDaoDatabase* pDatabase = NULL);

DECLARE_DYNAMIC(CimageData)

file://{{AFX_FIELD(CimageData, CDaoRecordset)

CByteArray m_Images;//声明字节数组用来存放图像数据

file://}}AFX_FIELD

// Overrides

// ClassWizard generated virtual function overrides

file://{{AFX_VIRTUAL(CimageData)

public:

virtual CString GetDefaultDBName();

virtual CString GetDefaultSQL();

virtual void DoFieldExchange(CDaoFieldExchange* pFX);

file://}}AFX_VIRTUAL

该类的实现为:

CimageData:: CimageData (CDaoDatabase* pdb)

: CDaoRecordset(pdb)

{

file://{{AFX_FIELD_INIT(CimageData)

m_nFields = 1;//数据库的表中仅有一个字段

file://}}AFX_FIELD_INIT

Silverlight数据绑定:怎样实现数据绑定

靶场弹道跟踪实时数据平滑算法及实现

谷歌分析现在提供网站管理员工具搜索查询数据

单片机实现对CF卡的读写

形容宽容大量的名人名言

大量的英语短语及区别

英语单词查询

反义词查询

数据管理制度

数据报告

WWW对大量数据查询的一种实现(精选7篇)

欢迎下载DOC格式的WWW对大量数据查询的一种实现,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档