组合框 vfp 中的 SQL Server 表名称

问题描述 投票:0回答:1

如何在 vfp 中的组合框中存储 SQL Server 表名称?

在阅读了 SQL Server 2005 Express 表中的 VFP ComboBox 内容后

有人可以帮我将 SQL Server 中的表名存储到 VFP 中的组合框吗?

我尝试使用

sqltables()
并将其存储在可以显示名称表的Grid1 vfp中。

我在加载表单上的代码:

public KONEKSI, mskedul1 
STORE SQLCONNECT('surya','surya','surya_database') TO KONEKSI 
IF KONEKSI > 0 
    SQLEXEC(KONEKSI,'use ksp_arthasurya') 
endif 
SQLTables(m.KONEKSI,'TABLE','tableList')

我在初始化表单上的代码:

thisform.grid1.recordsource = 'tablelist'

在我的 grid1 上显示的表包含我的 SQL Server dbo.ksp_arthasurya

我的问题是:我想要属于 VFP 组合框中显示的

dbo.ksp_arthasurya
模式的所有表的名称。如果我单击 VFP 组合框中的名称,VFP 中的 grid1 应该显示该表中的数据。

sql sql-server database odbc visual-foxpro
1个回答
0
投票

(你在多个网站上问同样的问题,你没看回复吗?无论如何)

这是一个示例表单,它将表名称放入组合框中,并在选择表后,在网格中显示该表的前 100 行:

(请注意,由于用户无法键入样式 2 的组合框,因此该代码不会被视为容易受到 SQL 注入攻击 - 但在您的实际用例中,您应该彻底进行评估)

Public oForm
oForm = Createobject('SampleForm')
oForm.Show()


Define Class SampleForm As Form
    Height=800
    Width =600

    Add Object cmbTables As ComboBox With Left=10, Top=10, Width=300,Style=2
    Add Object grdViewer As Grid With Left=0,Top=40,Height=760,Width=600,Anchor=15

    Procedure Init
        Local KONEKSI, lcSQL
        STORE SQLCONNECT('surya','surya','surya_database') TO KONEKSI 
        * Store Sqlstringconnect('Driver={SQL Server Native Client 11.0};Server=...;Database=ksp_arthasurya;...') To m.KONEKSI
        IF m.KONEKSI < 0 
            MESSAGEBOX("Couldn't connect.",0,'SQL Server connection',5000)
            RETURN .F.
        endif 
        SQLEXEC(m.KONEKSI,'use ksp_arthasurya')

        This.AddProperty('nHandle', m.KONEKSI)

        TEXT TO m.lcSQL noshow
Select CAST(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(Name) as varchar(200)) AS TableName
FROM sys.Tables
WHERE is_ms_shipped=0
ORDER by schema_name(schema_id), Name
        ENDTEXT

        lnResult    = SQLExec(m.KONEKSI, m.lcSQL,'TableList')
        If m.lnResult < 0
            Aerror(aWhy)
            Messagebox(aWhy[2])
            SQLDisconnect(0)
            Return .F.
        Else
            With Thisform.cmbTables
                .RowSourceType = 3
                .RowSource = 'select TableName from TableList into cursor crsTables nofilter'
                .ListIndex=0
            Endwith
        Endif
    Endproc

    Procedure cmbTables.InteractiveChange
        Local lcSQL

        Use In (Select('crsResult'))

        TEXT TO m.lcSQL TEXTMERGE noshow
select top(100) * from << TRIM(crsTables.TableName) >>
        ENDTEXT

        SQLExec(Thisform.nHandle, m.lcSQL ,'crsResult')
        With Thisform.grdViewer
            .ColumnCount = -1
            .RecordSource = "crsResult"
            .AutoFit()
        Endwith
    ENDPROC
    
    PROCEDURE Destroy
        SQLDISCONNECT(this.nHandle)
    endproc
Enddefine
© www.soinside.com 2019 - 2024. All rights reserved.