как я могу разделить строку адреса на улицу и номер дома через SQL в базе данных Visual FoxPro - PullRequest
0 голосов
/ 07 августа 2020

наш клиент использует базу данных Visual FoxPro. Мне нужно создать строку sql, в которой я должен разделить поле адреса на улицу и номер дома. Я нашел функции AT и CharIndex, но они работают только непосредственно в Visual Fox Pro, а не в операторе SQL.

Я использую vb. net для подключения к базе данных VFP через oledb. Это должно быть сделано в операторе sql, для этого нельзя использовать другой код.

Заранее спасибо.

Dim con As System.Data.OleDb.OleDbConnection = Nothing
    con = New System.Data.OleDb.OleDbConnection("Provider=vfpoledb;Data Source=" & Me.lblDatabase.Text & ";Collating Sequence=machine;")
    con.Open()

    Dim sqlString As String = "SELECT Address FROM AddressTable"
    Dim cmd As OleDbCommand = New OleDbCommand(sqlString, con)
    Try
        con.Open()
    Catch ex As Exception

    End Try


    Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)

    Dim myDataSet As DataSet = New DataSet()

    ' Using DataAdapter object fill data from database into DataSet object
    Try
        myDA.Fill(myDataSet, "MyTable")
    Catch ex As Exception
        MsgBox("Error " & Err.Description)
    End Try


    ' Binding DataSet to DataGridView
    Try
        DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
    Catch ex As Exception

    End Try


    con.Close()

1 Ответ

0 голосов
/ 07 августа 2020

Вы говорите, что он постоянно разделяется первым пробелом. Затем:

Dim constr As String = "Provider=vfpoledb;Data Source=" & Me.lblDatabase.Text
Dim sqlString As String = "SELECT Address, 
    cast(Substr(Address, 1, AT(' ', Address)) as char(100)) as StreetName,
    cast(Ltrim(Substr(Address, AT(' ', Address))) as char(100)) as AddressLineRest
    FROM AddressTable"

Dim myDataTable As DataTable = New DataTable()
Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(sqlString, constr)

' Using DataAdapter object fill data from database into DataSet object

Try
    myDA.Fill(myDataTable)
    DataGridView1.DataSource = myDataTable.DefaultView
Catch ex As Exception
    MsgBox("Error " & Err.Description)
End Try

PS: Возможно, вместо MsgBox вы захотите использовать стандартный. Net MessageBox.

ПРИМЕЧАНИЕ. Важно преобразовать ваши данные в известный тип данных (( как Char (100) здесь). В противном случае вы можете тихо потерять данные.

...