首先数据库是sql server 2000,窗体form1,数据库表是齿轮,列名有齿数,变形系数,等现在想让输入的变量z,如果对应于数据库齿轮的齿数,然后返回相对应的变形系数给变量f。返回相对应的变形系数怎么弄啊?我是用的adodc控件,已连接上数据库。还有一个是数据库中齿数不可能每个数值都罗列出来,比如里面的齿数只有40,42,45,50,60,70,80,100,150,200如果想让输入的齿数z是46的话自动对应数据库里离它最近的45,那又该怎么办。菜鸟提问,大家莫笑哈

解决方案 »

  1.   

    select top 1 column1 from table_1  order by abs(column1-46)
      

  2.   

    select top 1 column1 from table_1  order by abs(column1-46)你要找距离46最近的,那么就是列值与46差的绝对值最小的abs =绝对值函数
    order by 排序
    按照abs(column1-46)从小到大排序top 1选第一列解释得很清楚了
    '--------------
    Adodc.RecordSource = "select top 1 column1 from table_1  order by abs(column1-" & z & ")"
    Adodc.Refresh 至于你的adodc连到哪那就是你决定了返回相应的变形系数
    sql="select para from table_1 where column1=" & z
      

  3.   


    dim z as string
    dim f as string
    z=trim(text1.text)
    Adodc1.ConnectionString = " Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=数据库名称;User ID=sa;password=;Data Source=SQL服务器名称"
    Adodc1.RecordSource = "select top 1 column1 from [table_1]  order by abs(column1-" & z & ")" 
    Adodc1.Refresh
    f = Adodc1.Recordset.Fields("column1")
      

  4.   


    其实不如事先将齿数用 Combobox 或 Listbox 列出来,供用户选择,强似盲目输入后近似匹配。起码更快。Private Sub Form_Load()
    Dim rs As New ADODB.RecordsetSet rs = Adodc1.Recordset.ActiveConnection.Execute("Select Distinct 齿数 From 齿轮 Order By 齿数")
    Do Until rs.EOF
        Combo1.AddItem rs!齿数
        rs.MoveNext
    Loop
    If Combo1.ListCount Then Combo1.ListIndex = 0
    set rs = Nothing
    End Sub