首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

设计一个查询功能,多谢

2012-12-17 
设计一个查询功能求助,谢谢!呃……表简单是这样子的,用ACCESS表的:编号型号备注11a大齿轮21b中齿轮31c中齿轮

设计一个查询功能求助,谢谢!
呃……表简单是这样子的,用ACCESS表的:

编号型号备注
11a大齿轮
21b中齿轮
31c中齿轮
42a大齿轮
52b中齿轮
63b中齿轮
73c小齿轮
83d细齿轮
94a大齿轮
104b中齿轮
114c小齿轮
124d细齿轮

然后我想在文本框TEXT1里输入:1a-1c,4a,然后就可以查询到以下几条记录:

编号型号备注
11a大齿轮
21b中齿轮
31c中齿轮
94a大齿轮

之后我想在文本框TEXT1里输入:1a-1c,4a-4c,然后就可以查询到以下几条记录:

编号型号备注
11a大齿轮
21b中齿轮
31c中齿轮
94a大齿轮
104b中齿轮
114c小齿轮
124d细齿轮

然后输入单个的条件,例如:1c,就会出现:
31c中齿轮


这应该怎么写?刚刚学SQL不太懂怎样写……求解答,谢谢!~
[解决办法]
Private Sub Command1_Click()
    Dim v As Variant, sqlstr As String
    v = Split(Text1.Text, ",")
    For Each s In v
        If InStr(s, "-") > 0 Then
            sqlstr = sqlstr & "型号>=""" & Replace(s, "-", """ And 型号<=""") & """ or "
        Else
            sqlstr = sqlstr & "型号=""" & s & """ or "
        End If
    Next s
    sqlstr = "select * from tb where " & Left(sqlstr, Len(sqlstr) - 4)
    Set rs = conn.execute(sqlstr)
End Sub

[解决办法]

基本的思路是这样:

1 首先分解你在 Text1 中的输入条件。例如:

1a-1c,4a-4c -> 1a, 1b, 1c, 4a, 4b, 4c

strTypeList = "1a, 1b, 1c, 4a, 4b, 4c"

2 查询语句如下:

"SELECT * FROM yourTable WHERE 型号 IN (" & strTypeList & ")"


[解决办法]

这样分解:

Dim strGroup() As String, strItem() As String
Dim i As Integer
Dim a As String, z As String
Dim strTypeList As String

strGroup = Split(Replace(Text1, " ", ""), ",")

For i = 0 To UBound(strGroup)
    If InStr(strGroup(i), "-") Then
        strItem = Split(strGroup(i), "-")
        If UBound(strItem) = 1 Then
            a = Trim(strItem(0))
            z = Trim(strItem(1))
            Do Until a > z
                strTypeList = strTypeList & a & IIf(a < z, ", ", "")
                a = Left(a, 1) & Chr(Asc(Right(a, 1)) + 1)
            Loop


        End If
    Else
        strTypeList = strTypeList & strGroup(i)
    End If
    
    If i < UBound(strGroup) Then strTypeList = strTypeList & ", "
Next i

Debug.Print strTypeList

你可能还需要一些输入句法检查来避免输入错误。
[解决办法]
感谢!
但我的搜索还需要同时符合其它的条件,例如TEXT2.TEXT再按其它条件再搜索一次。
我是想用复合查询,但又想不到怎样写啊……
[解决办法]
为什么你的输入
1a-1c,4a-4c

结果中会有?
12 4d 细齿轮

你想要的是什么逻辑呢?我以为4a-4c就是 4a,4b,4c阿

虽然搞不懂你的逻辑,但是你可以多设置几个textbox

就是4a填写在一个box里面,4c填写在另外一个里面; 1a在一个里面,1c在另一个里面。这样比较简单。
 
[解决办法]
dim s() as string
dim ss as string
dim S1() as string
dim sa as string

s=split(text1,",")
for i=0 to ubound(s)
   if s(i)<>"" then
     s1=split(s(i),"-")
     if ubound(s)=0 then
        sa="字段名='"&s1(0)&"'"   
     else
       sa="字段名 between '"& s1(0) &"'  AND '"& s1(1)&"'"       
     end if
     if ss="" then
       ss=sa
     else
        ss=ss & " OR "& sa
     end if
   end if
next

sql="select * from 表名 WHERE "& ss

热点排行
Bad Request.