2016-07-10 9 views
1

VB6 프로젝트를 만들고 있는데 액세스 데이터베이스에서 학생을 검색하고 편집하는 방법이 있습니다. 나는 그것을 검색하고 수정 학생을 선택할 수 있도록 프로그램을 코딩해야합니다. 이 웹 페이지를 보았지만 학생을 선택하지 않았으므로 편집하기 전에 사용자가 선택해야합니다 (https://support.microsoft.com/en-us/kb/195472). 어떻게하면 사용자가 편집 할 수 있도록 특정 행을 선택할 수 있도록 프로그래밍합니까? 코드를 사용하여 웹 사이트 :vb6 Datagrid에서 행을 프로그래밍 방식으로 선택하는 방법

Option Explicit 
Dim connSearch As New ADODB.Connection 
Dim rec As New ADODB.Recordset 

Private Sub cmdSearch_Click() 
connSearch.Close 
connSearch.Open connstr 
rec.CursorLocation = adUseClient 

    If cmbSearch.Text = "Last Name" Then 
    rec.Open "Select * From Table1 where [Last Name] like '" & txtSearch.Text & "'", connSearch, adOpenDynamic, adLockOptimistic 
    frmStudents.cmdShowall.Enabled = True 
    If rec.EOF Then 
     MsgBox "No Student Found.", vbInformation, "Error" 

    Else 
     Set frmStudents.StudentTable.DataSource = rec 
     MsgBox "Student found Successfully", vbInformation, "Success" 
     ' Remove previously saved bookmark from collection 
    If (frmStudents.StudentTable.SelBookmarks.Count <> 0) Then 
     frmStudents.StudentTable.SelBookmarks.Remove 0 
    End If 
     ' Append your bookmark to the collection of selected rows 
    frmStudents.StudentTable.SelBookmarks.Add rec.Bookmark 
     frmSearch.Hide 
    End If 
    End If 
End Sub 

도움 주셔서 감사합니다. :)

편집 : 의견에서 이동 코드 당신은 frmStudents.Adodc1 데이터 소스를 채우기 위해 레코드를 사용하고 있어야합니다

Private Sub Form_Load() 
    connSearch.Open connstr 'open the connection 
    frmStudents.Adodc1.ConnectionString = conn.connstr 
    Set frmStudents.StudentTable.DataSource = frmStudents.Adodc1 
End Sub 
+0

예제처럼 보입니다. DataGrid 데이터 소스가 전체 레코드 세트로 설정되어서는 안됩니까? Datagrid를 채우는 양식로드 코드는 어디에 있습니까? – dbmitch

+0

이것은 폼이 아닌 모듈의 일부인 것처럼 보입니다 - 폼과 같은 형태입니까? 아니면 추출한 코드를 보여 주시겠습니까? – dbmitch

+0

두 가지 양식이 있습니다. 하나는 학생을 검색하고 하나는 DataGrid 및 컨트롤입니다. 질문에서 제공 한 코드는 검색 양식의 추출물입니다. 다음 주석은 데이터 그리드와 데이터베이스를 검색하는 폼로드 코드를 보여줍니다. –

답변

1

여기까지하지만, 어떤 이유로 당신이 그 코드를 표시하지 않습니다.

그런 다음 코드에서 학생을 검색하고 책갈피를 지정하기 위해 새 레코드 세트를 여는 중입니다. 그것은 작동하지 않습니다.

예제보기와 같이 모든 학생을 표시하려면 데이터 소스 만 남겨두고 DataGrid에서 사용하는 것과 동일한 레코드 세트에서 찾기를 수행해야합니다.

폼의 코드를 보여주지 않으므로 그게 무엇인지 추측하기가 어렵습니다. 레코드 집합이 폼의 모듈을 사용하여 글로벌이라고 가정합니다. 그렇지만 아닐 수도 있습니다.

그 정보가 없으면 나는 아마도 번역이 잘되기를 기대하면서 뭔가를 추측 할 수 있습니다.

이상적으로 당신은 당신이 대신 frmStudents.Adodc1.RecordsetfrmStudents.Adodc1에 할당 된 레코드 변수를 사용하는 것이

Dim varBookmark as Variant 

With frmStudents.StudentTable 

    varBookMark = .Bookmark 

    ' Remove previously saved bookmark from collection 
    If (.SelBookmarks.Count <> 0) Then 
     .SelBookmarks.Remove 0 
    End If 
    .Recordset.Find "[Last Name] like '" & txtSearch.Text & "'" 
    ' If Find method fails, notify user 
    ' If the search fails, the Recordset will point to either EOF or BOF. 
    If .Recordset.EOF or .Recordset.BOF Then 
     Msgbox "No Student Found" 
     ' Reset back to last selection 
     .Recordset.Bookmark = varBookmark 
    Else 
     Msgbox "Student Found" 
    .SelBookmarks.Add .Recordset.Bookmark 
    Endif 

End With 

은이

rec.Open "Select * From Table1 where [Last Name] like '" & txtSearch.Text & "'", connSearch, adOpenDynamic, adLockOptimistic 
frmStudents.cmdShowall.Enabled = True 
If rec.EOF Then 
    MsgBox "No Student Found.", vbInformation, "Error" 

Else 
    Set frmStudents.StudentTable.DataSource = rec 
    MsgBox "Student found Successfully", vbInformation, "Success" 
    ' Remove previously saved bookmark from collection 
If (frmStudents.StudentTable.SelBookmarks.Count <> 0) Then 
    frmStudents.StudentTable.SelBookmarks.Remove 0 
End If 
    ' Append your bookmark to the collection of selected rows 
frmStudents.StudentTable.SelBookmarks.Add rec.Bookmark 
    frmSearch.Hide 

교체,하지만 당신은 공유하지 않은 그게 나랑 어쩌면이게 너에게 도움이 될거야.

+1

이것은 정확히 내가 고마워 할 필요가있는 것이지만 성이 존재하지 않는다면 msgbox가 "user not found"라는 것을 보여주는 검증이 필요하다. 성이 존재하지 않는다면 ** BOF 또는 EOF가 참이거나 현재 레코드가 삭제되었습니다. 요청한 작업은 현재 레코드가 필요합니다. ** –

+0

NoMatch를 확인하는 위의 편집을 시도하십시오. – dbmitch

+0

** NoMatch **가 레코드 세트 뒤에 존재하지 않기 때문에 작동하지 않습니다. –