Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Не работает DataGrid! Добавлено: 31.10.03 15:09  

Автор вопроса:  Scuder | ICQ: 143518458 

Хелп! Всю голову уже сломал.. :-(

Вот кусок кода:

Dim TempRS As New ADODB.Recordset

Dim TempDB As New ADODB.Connection

Private Sub Form_Load()

TempDB.Open "DRIVER={SQL Server};SERVER=SERVER;DATABASE=Payments;USERID=DBO;PASSWORD=PWD"

TempRS.Open "Select * FROM Payments", TempDB, adOpenStatic, adLockReadOnly

Set Me.DataGrid1.DataSource = TempRS

Me.DataGrid1.Refresh

Me.DataGrid1.ReBind

TempRS.Close

TempDB.Close

Set TempRS = Nothing

End Sub

Всё работает, но стандартный майкрософтовский DataGrid не заполняется! Платные гриды типа GRIDEX 2000 работают нормально (но денег просят), а этот не хочет.. :-(

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 ulis



ICQ: 50807612 

Вопросов: 0
Ответов: 10
 Профиль | | #1 Добавлено: 31.10.03 18:22

пред открытием соединения попробуй сделать

TempDB.CursorLocation = adUseClient

Me.DataGrid1.Refresh

Me.DataGrid1.ReBind

- эти две строки не обязательны

А почему ты не пользуешься "стандартной"  строкой подключения к mssql серверу?

strC = "Provider=MSDATASHAPE; Data Provider=SQLOLEDB.1;Password=" & strPassword & ";Persist Security Info=False;User ID=" & strUserName & ";Initial Catalog=" & strBaseName & ";Data Source=" & strServerName

 

Ответить

Номер ответа: 2
Автор ответа:
 Scuder



ICQ: 143518458 

Вопросов: 12
Ответов: 37
 Профиль | | #2 Добавлено: 03.11.03 10:59

Слушай, я сейчас отупею совсем..

Код, который я писал, по-идее должен работать. Но даже с поправками,

которые ты указал, ничего не получается. Порылся в мелкомягком, вот

какой вариант предлагает он:

Dim TempRS As New ADODB.Recordset

Dim TempDB As New ADODB.Connection

Private subRst As ADODB.Recordset

Const PAGE_SIZE = 13

Private Function GetRstPage(recset As ADODB.Recordset) As ADODB.Recordset

Dim x As Long

Dim fld As Field

Dim origPage As Long

origPage = IIf(recset.AbsolutePage > 0, recset.AbsolutePage, 1)

With subRst

If .State = adStateOpen Then .Close

'Create Fields

For Each fld In recset.Fields

.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes

Next fld

'Add Records

.Open

For x = 1 To PAGE_SIZE

If recset.EOF Then Exit For

.AddNew

For Each fld In recset.Fields

subRst(fld.Name) = fld.Value

Next fld

.Update

recset.MoveNext

Next x

.MoveFirst

recset.AbsolutePage = origPage

End With

Set GetRstPage = subRst

End Function

Private Sub Form_Load()

Dim sql As String

Set subRst = New ADODB.Recordset

TempDB.ConnectionString = "DRIVER={SQL

Server};SERVER=SERVER;DATABASE=Payments;USERID=sa;PASSWORD=xxx" ', , adOpenStatic

'TempDB.ConnectionString = "Provider=MSDATASHAPE; Data Provider=SQLOLEDB.1;Password=xxx;Persist Security Info=False;User ID=sa;Initial Catalog=Payments;Data Source=SERVER"

TempDB.Open 4

sql = "Select * FROM Payments"

With TempRS

.CursorLocation = adUseClient

.PageSize = PAGE_SIZE

.Properties("Initial Fetch Size") = PAGE_SIZE

.Open sql, TempDB, adOpenKeyset, , adAsyncFetchNonBlocking

Set DataGrid1.DataSource = GetRstPage(TempRS)

End With

TempRS.Close

TempDB.Close

Set TempRS = Nothing

End Sub

То есть не тупо сунуть гриду рекордсет, а с какими-то заморочками.. Я

пока не могу разобраться в смысле функции, точнее смысл-то понятен -

разбить грид на страницы по 13 записей, но нах? Как же сделать

стандартное заполнение датагрида без всяких геморроев??

Ответить

Номер ответа: 3
Автор ответа:
 Scuder



ICQ: 143518458 

Вопросов: 12
Ответов: 37
 Профиль | | #3 Добавлено: 03.11.03 17:03

Всем сорри за беспокойство. :-)

Что-то я сразу не догнал, что если закрыть рекордсет, то и грид пустым окажется.. :-))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам