0

私は自分自身を非常に忍耐強い人だと思っています。たとえば、自分が取り組んでいるプログラムの範囲内で物事を機能させるという決意を持っています。ただ、壁に頭をぶつけて何もしないのではなく、実際に何かの知識を身につけるために使える貴重な時間を無駄にしているだけだと感じています。SO ..私は、この問題を修正するために今日費やした11時間は、それを修正できる限り、無駄にならなかったふりをするつもりです。私はデータベースに不慣れで、データベースプログラムに取り組んでいます。それはvb6で書かれていて、vb.netで書き直そうとしています。私はすべての不要な派手なアドオンからプログラムを完全に取り除き、今ではそれを実行するために必要なコードを持っています。プログラムはレコードを取得しますが、これらのレコードをデータグリッドに入力しません。はい、

form1

Imports ADS_SQL_TEST_VBNET
Public Class Form1

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Module1.Main()
End Sub

Public Sub cmdSQLBound_Click()
sWhichDataType = "SQL"
Call SetGridSize("SQL Table Bound.")
End Sub

Public Sub optYes01ph_Click()
BuildTable()         'sets sFields and sQuery
cmdSQLBound_Click()
End Sub

End Class

module1

Imports System.Data
Imports System.Data.SqlClient
Imports ADS_SQL_TEST_VBNET.Form1
Imports ADS_SQL_TEST_VBNET.Class1

Public Module Module1

Public rs As ADODB.Recordset
Public db As ADODB.Connection

Public dgvDataGrid As DataGridView
Public DataGridRef As New DataGridView
Public sWhichDataType, sSource, sTable, sFields, sQuery, sFilter, sOrderBy, sSelectedIndex, sStoreId    
Public lblCount As Object
Public Ctrl1, Ctrl2, Freq, Overhead As Decimal
Public l, x As Integer
Public A, I As Long


Public Sub Main()

  Form1.optYes01ph_Click()

End Sub


Public Sub BuildTable()
    If sTable = "yes01ph" Or sTable = "" Then
        sTable = "yes01ph"
        sFields = "store_id,control_no,first_name,last_name,company,address,city,State,zip,phone,total,stat_code,Year,make_id,model_id,engine_id,contact,phone1,phone2,phone3,phone4,invoice_no,ready_proc,summary,note"
        sOrderBy = "control_no"
    Else
        sFields = "store_id,ml_id,first_name,last_name,company,address,city,state,zip,phone,last_upd,address2,phone2,ref_count,comments,fobs_key,quest,lockedby,rmte_stat,serv_upd,serv_id,psm_use,psm_points"
        sOrderBy = "ml_id"
    End If
    BuildFilter()
End Sub

Public Sub BuildFilter()
    sFilter = " AND control_no > 1 AND control_no < 500000"
    BuildQuery()
End Sub

Public Sub BuildQuery()

    sQuery = "SELECT " & sFields & " FROM " & sTable & " WHERE Store_ID Like 'XXX' " & sFilter & " Order By " & sOrderBy
    sQuery = Replace(sQuery, "'XXX'", "'" & Trim(UCase("250")) & "'")
End Sub



Public Sub SetGridSize(ByVal sMessage As String)

    Dim lblTableType As String
    lblTableType = "  " & sMessage
    Form1.dgvDataGrid.Text = "Data populated using: " & UCase(sMessage)

    DataGridRef.ColumnCount = 99
    DataGridRef.RowCount = 1

    DataSetRef.LoadDataBound()
End Sub
End Module

クラス1

Public Class Class1

Public Sub LoadDataBound()

rs = GetData()
If Not rs.EOF Then
    dgvDataGrid.DataSource = rs '     Bind the Datagrid to the recordset
    dgvDataGrid.Refresh()
Else
    MsgBox("No Records Found in DataGrid!")
End If
End Sub

Public Function GetData() As ADODB.Recordset
sWhichDataType = UCase(Trim(sWhichDataType))

sSource = "development"
GetData = OpenSQL()
End Function

Public Function OpenSQL() As ADODB.Recordset
db = New ADODB.Connection : rs = New ADODB.Recordset ' Initialize Connection object &    RecordSet object

With db
    .CursorLocation = ADODB.CursorLocationEnum.adUseClient
    .Mode = ADODB.ConnectModeEnum.adModeReadWrite
    .ConnectionString = "Provider=SQLOLEDB.1;Password=pacesql;Persist Security Info=True;User ID=sa;Initial Catalog=speedwrench;Data Source=" & sSource
    .Open() ' "Provider=SQLOLEDB.1;Data Source=development", "sa", "pacesql", -1
End With

OpenSQL = db.Execute(sQuery)
End Function

End Class

問題はLoadDataBound()サブルーチン内にあると思いますが、自分で修正できなかったため、はっきりとは言えません。このすべてを読むのに時間を割いてくれてありがとう、そしてそれが現在ずさんで、未使用のメソッドや変数がロードされている場合は申し訳ありません...私はそれを機能させるためにこのことを完全に打ち負かしました。

4

1 に答える 1

1

問題は、ADO.NETではなくADOを使用していることだと思います。

私はあなたのコードを理解する時間がありませんが、多分あなたはうまくいく何かから始めるべきです。これにより、データベースからいくつかのデータが取り出され、datagridviewが埋められます。もちろん、接続文字列やテーブル/フィールド名などを変更する必要があります。

  Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    Dim strCnn As String = "Data Source=sqlservername;Timeout=10;Database=databasename;Trusted_Connection=no;User ID=userid;Password=password;"
    Using cnn As New SqlConnection(strCnn)
      cnn.Open()
      Dim strSql As String = "SELECT * FROM Tablename"
      Dim dtb As New DataTable
      Using dad As New SqlDataAdapter(strSql, cnn)
        dad.Fill(dtb)
      End Using
      'now hide all the columns except the ones we want to show'
      dgv.AutoGenerateColumns = False 'dgv is the name of the datagridview'
      Dim intColIndex As Integer
      intColIndex = dgv.Columns.Add("Field1", "Field 1") 'aliases'
      dgv.Columns(intColIndex).DataPropertyName = "F1" 'column name in database'
      intColIndex = dgv.Columns.Add("Field3", "Field 3") 'aliases'
      dgv.Columns(intColIndex).DataPropertyName = "F3" 'column name in database'
      'now bind'
      dgv.DataSource = dtb
    End Using
  End Sub

ああ、あなたは必要になるでしょう

Imports System.Data
Imports System.Data.SqlClient

フォームのソースコードの上部にあります。

于 2012-06-04T03:41:49.177 に答える