PDA

View Full Version : به نظر شما این روش در باز کردن SQL درسته ؟



vahab_vb
دوشنبه 21 اسفند 1385, 13:17 عصر
سلام
به نظر شما این روش، روش خوبیه :




Public Sub KALA_LIST(ByVal CONNECTED_OBJECT As Object)
On Error Resume Next
Dim SQL_STRING As String ' ALL COMMANDS OF SQL INTO THIS ...
Dim THE_TEMP_STRING As String ' TEMP STRING FOR ANY LOCAL WORK
Dim TEMP_CY As Long ' TEMP CYCLE FOR ANY LOCAL WORK
Dim ROW_COUNTER As Long

''/// OPENS RECORDSET
'> SAVES SQL STRING TO USE BY THE NEXT STATE
SQL_STRING = "SELECT ID,KalaName FROM KalaHa Order By ID Asc"

'> OPENS THE RECORD SET
Call OBJRS.Open(SQL_STRING, OBJCN, adOpenKeyset, adLockReadOnly, adCmdText)

'> SETS THE TOTAL OF COLS.
CONNECTED_OBJECT.Cols = 4
'> SETS THE FLEX TABLE WIDTH AND LEFT TO THE ACTIVE FORM
CONNECTED_OBJECT.Left = 0
CONNECTED_OBJECT.Width = CONNECTED_OBJECT.Parent.Width - 70

'> SETS THE TOTAL OF NORMAL ROWS AND FIXEDROWS
CONNECTED_OBJECT.Rows = (OBJRS.RecordCount + 1)
CONNECTED_OBJECT.FixedRows = 1

'> SETS EACH COLS. PROPERTY TO THE FLEX OBJECT
With CONNECTED_OBJECT
.TextMatrix(0, 0) = ""
.ColWidth(0) = 0
.TextMatrix(0, 1) = "˜Ï ˜ÇáÇ"
.ColAlignment(1) = flexAlignRightCenter
.ColWidth(1) = 900
.TextMatrix(0, 2) = "äÇã ˜ÇáÇ"
.ColAlignment(2) = flexAlignRightCenter
If CONNECTED_OBJECT.Rows > 15 Then
'with scroll
.ColWidth(2) = 4400
Else
'without scroll
.ColWidth(2) = 4650
End If
.TextMatrix(0, 3) = "ãæÌæÏí"
.ColAlignment(3) = flexAlignRightCenter
.ColWidth(3) = 1500
End With

Dim MOJOODI As Long
Dim VR As Long
Dim KHR As Long
Do While Not OBJRS.EOF
ROW_COUNTER = ROW_COUNTER + 1
CONNECTED_OBJECT.TextMatrix(ROW_COUNTER, 1) = OBJRS("ID")
CONNECTED_OBJECT.TextMatrix(ROW_COUNTER, 2) = OBJRS("KalaName")

'> SAVES SQL STRING TO USE BY THE NEXT STATE
SQL_STRING = "SELECT TheKala,Vorood,Khorooj FROM TheGeneral Where TheKala=" & CStr(OBJRS("ID"))

'> OPENS THE RECORD SET
Call OBJRS2.Open(SQL_STRING, OBJCN, adOpenKeyset, adLockReadOnly, adCmdText)

OBJRS2.MoveFirst
MOJOODI = 0
VR = 0
KHR = 0
Do While Not OBJRS2.EOF
'If OBJRS2("TheAnbar") = OBJRS("ID") Then
VR = VR + CLng(OBJRS2("Vorood"))
KHR = KHR + CLng(OBJRS2("Khorooj"))
'End If
OBJRS2.MoveNext
Loop
MOJOODI = VR - KHR

''/// CLOSE THE SECOND RECORD SET
OBJRS2.Close
Set OBJRS2 = Nothing
''////////////////////

CONNECTED_OBJECT.TextMatrix(ROW_COUNTER, 3) = CStr(MOJOODI)
OBJRS.MoveNext
Loop
''////////////////////

''/// CLOSE THE RECORD SET
OBJRS.Close
Set OBJRS = Nothing
''////////////////////

'// MOVES THE SCROLL BAR TO THE END OF THE FLEXGRID
If ROW_COUNTER > 0 Then
'MOVES THE CURSOR TO THE END OF THE LIST
CONNECTED_OBJECT.TopRow = (CONNECTED_OBJECT.Rows - 1)

'ENABLE EDIT COMMAND BUTTONS
With FRM_KALA_MANAGEMENT
.CMD_REMOVE.Enabled = True
.CMD_RENAME.Enabled = True
.CMD_PRINT.Enabled = True
End With
Else
'DISABLE EDIT COMMAND BUTTONS
With FRM_KALA_MANAGEMENT
.CMD_REMOVE.Enabled = False
.CMD_RENAME.Enabled = False
.CMD_PRINT.Enabled = False
End With
End If
End Sub




در قسمت بالا منظور از آرگومان CONNECTED_OBJECT یک جدول مثل Flex Grid هستش. که این ساب باید بهش وصل بشه. توش مقدار بده.
حالا اینجا یه مسئله هستش. چون فیلدهای اول و دوم مشکلی نداره و براحتی مقدارها رو بر میگردونه. ولی من در فیلد سوم اومدم دوباره یه چرخه گذاشتم و در هر بار چرخش برای بالا بردن سرعت یک رکوردست رو حاوی شرطهای خاصی باز کردم و دوباره بستم. یعنی رکوردست دوم به ازای هربار چرخش هی باز میشه و هی بسته میشه.
به نظر شما من این روش رو استفاده کنم بهتره یا اینکه هر دو تا رکوردست رو اول باز کنم و بعد هی از movefirst استفاده کنم ؟؟؟ کدومش ؟؟؟!!!