1

vba/excelのユーザーフォームのスプレッドシートコントロールにインポートしようとしているデータを含むテーブルがあります。

結果はエンドユーザーに表示されるため、SQLテーブルの列見出しではなく、初期化時にヘッダーセルの値を設定しました。

私のクエリは次のようになります

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String


sConnString = "Provider=SQLOLEDB;Data Source=mysource;Initial Catalog=mydatabase;User Id=myusername;Password=mypassword;QuotedID=No"
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

conn.Open sConnString
Set rs = conn.Execute("SELECT * FROM WOFT_tbl_clients WHERE userid =  '" & UserId.Value & "';")
If Not rs.EOF Then
   ///////////////// 
   /something here!/ 
   ///////////////// 
Else
  MsgBox "Error: No records returned.", vbCritical
End If

If CBool(conn.State And adStateOpen) Then conn.Close
Set conn = Nothing
Set rs = Nothing

私がやろうとしているのは、データベースから選択した列の出力を取得し、スプレッドシートコントロールで好きな列にそれらをフィードできるようにすることです。

したがって、実際には、列ID、名前、およびユーザーIDの結果セットを行2から始まるスプ​​レッドシートコントロールに出力できるループが必要です。私のデータベースには、このスプレッドシートでは不要な他の多くの列も含まれていますが、同じユーザーフォームの別のスプレッドシートコントロールに必要であり、そのうちのいくつかは両方に表示されます。

私がやりたいのは、各列を独自のレコードセットに含めることです。そのため、IDレコードセットにIDのようなものを格納して、スプレッドシートコントロール1の列Aで使用し、スプレッドシートコントロール2の列6で使用することができます。 ?

これが理にかなっていることを願っています!Excel2010を使用しています

4

1 に答える 1

0

1つのテーブルの各データ列を追加のレコードセットに含めると、リレーショナルデータベースモデルのロジックに従わない分離されたデータリストが表示されます。データが実際にその方法で分離されている場合、つまりidリスト、name別のリストなどが同じテーブルに存在する場合、-許してください-データベースモデルはかなり悪いです。

それでもSQLデータベースから特定の列のみを取得する場合は、SQLステートメントでそれらを指定します。

SELECT id, name, userid FROM tablename WHERE anycondition ORDER BY name

レコードセットオブジェクトが返すすべてのレコードをループするには、次のようなdo-untilループを使用します。を忘れないでください。そうしないMoveNextと、無限ループが発生する可能性があります。

Do Until rs.EOF
    ... do anything you want with the record ...

    rs.MoveNext
Loop

これがあなたが必要としていたものであることを願っています。私があなたのニーズを正しく理解していなかったならば、さらに説明してください。

于 2012-08-08T20:05:20.307 に答える