2009-09-21 1 views
1

전 db 만들기가 처음이에요. 지금까지 내가 좋아하는 것처럼 양식을 설정할 수 있지만 바인딩 된 값이 없습니다 b/c 테이블간에 전환해야합니다 (아마도 첫 번째 테이블의 모든 필드를 두 번째 테이블에 추가 할 수 있지만 나는이 일을 스스로 배우고 있었다.).어떻게 편집 할 수 있도록 Access에서 VBA를 사용하는 테이블 내의 필드를 참조합니까?

두 가지 문제가 발생했습니다.

먼저, 해당 레코드 소스가 myTable이되도록 양식을 승인하는 데 문제가 있습니다. 나는 이유를 모른다. 충분히 단순 해 보입니다.

form.RecordSource="myTable" 

불행히도, 작동하지 않습니다. 그렇게하면 myTable의 필드에 바인딩 된 텍스트 상자에 #error 또는 #name이 표시됩니까? 의도 한 값 대신에 난 아무것도를 얻기 위해해야 ​​할 일을했을 내가 그게 무슨 뜻인지 몰라

"SELECT * FROM myTable, myTable AS backup_1;" 

하지만 그건 : 시도하고이 문제를 해결하려면

, 나는 양식의 특성에 가서 그것의 제어 소스를 설정 일하다. 이것은 나의 첫 번째 문제입니다 - 어떻게하면 DB를 헛소리없이 문서에 연결하고 참조가 제대로 작동합니까? 나는 그것을 지금까지 3 가지 다른 방식으로 해왔다. 하나는 잠시 동안 일한 후 멈추었다. 하나는 (form.recordSource=myTable)은 단순히 작동하지 않았고, 다른 하나는 내가 언급 한 첫 번째 방법이었다. 그들 모두는 나에게 문제를 일으키고있다.

아무튼 나는 실제 작업에 가장 가깝기 때문에 SELECT...을 사용했습니다. 거기에서 필자는 Unbound를 [myTable.FieldName]으로 남기고 싶지 않은 텍스트 상자를 설정하고 작동했습니다. 프로그래밍 방식으로 [myTable.FieldName]을 사용하여 특정 필드의 정보를 어려움없이 특정 레코드에서 편집 할 수있었습니다. 문제는 프로그래밍 방식으로 해당 필드에 저장된 데이터를 편집 할 수없는 것입니다. 예를 들어
, 내가하려고하면 :

txtDisplayField1=[myTable.Field1] 

작품 벌금을. 하지만 시도해 보면 :

[myTable.Field1] = txtDisplayField1.text 

"이 개체에 값을 할당 할 수 없습니다."런타임 오류가 발생합니다. (어느 쪽이 가장 유용한 오류 메시지인지 알 수 있습니다.)

앞에서 필자는 내 양식을 테이블과 연결할 때 처음에는 효과가 있었지만 어떤 이유로 작동하지 않는 방법이 있다는 것을 언급했습니다. 원래 방금 입력 한 내용 :

form.recordsource = myTable 

잘 작동했습니다. Field1 등을 대괄호없이 참조하여 필드를 참조 할 수있었습니다. 그것은 금요일에 일을 하차하면서 나에게 작용했다. (나는 싫증이 난다. 나는 프로그래머가 아니다.) 그러나 내가 들어 왔을 때 일하지 않았다. 그것은 인간이 가능한 문제에 대한 가장 복잡한 말이다. 대단히 감사합니다. 내가 문제 형태 을 만드는 데

답변

0

내가 과의 레코드 원본이 myTable에 수 원하는 것을 동의합니다.

프로그램이 실행되는 동안 양식의 레코드 원본을 변경하는 것은 고급 기술이므로 전문가 만 사용할 수 있도록 예약해야합니다.시도하고이 문제를 해결하려면

, 나는 양식의 특성에 가서 그것의 제어 소스를 설정 : myTable에

로부터

SELECT *

원래 SQL이 있지만, 올바른 조금 복잡하다.

내가하려고하면 :

txtDisplayField1 = [myTable.Field1]

작품 벌금을. 그러나 나는 시도하는 경우 :

[myTable.Field1] = txtDisplayField1.text을

내가받을

런타임 오류 2448 - "당신은 이 객체에 값을 할당 할 수 없습니다." (. 어떤 이제까지 가장 도움이 오류 메시지 입니다)

이 시도 :

Me.Recordset.Edit 
Me.Recordset("Field1") = txtDisplayField1 
Me.Recordset.Update 
+0

어, 뭐라구? 바운드 레코드 소스는 기본적으로 편집 가능합니다. 아마도 내가이 대답을 downvote하기 전에 무슨 뜻인지 명확히하고 싶습니까? –

+0

바운드 레코드 소스는 기본 SQL 문을 업데이트 할 수있는 경우에만 편집 할 수 있습니다. OP의 예제는 그의 레코드 세트가 실제로 업데이트 가능하다고 제안하는 반면, 기본 SQL 문이 업데이트 할 수없는 레코드 세트를 생성하는 경우 예제 레코드 세트 편집이 작동하지 않습니다. –

2

당신은 액세스의 기본 설계 싸우는 것 같다.

구조가 동일한 테이블이 두 개있는 경우 (잘 설계된 데이터베이스는 아니지만, 문제가 발생 함) 폼의 레코드 원본을 설정하기 위해 OnOpen 이벤트를 사용할 수 있습니다. 이 작업을 수행하는 A (사용자 친화적 인 아주는 아니지만) 매우 간단한 방법은 다음과 같습니다

Private Sub Form_Open(Cancel As Integer) 
    If vbYes = MsgBox("Edit Table1?", vbQuestion+vbYesNo, "Choose table") Then 
     Me.RecordSource = "Table1" 
    Else 
     Me.RecordSource = "Table2" 
    End If 
    End Sub 

당신은 예/아니오 질문을하고 있기 때문에 끔찍한 UI의 이유는,하지만 대답은 정말 "표"입니다 또는 "table2". 질문을 오해하는 것은 매우 쉽습니다.

양식의 모든 컨트롤은 기본 필드에 바인딩되어야합니다. 그렇게하면 데이터를 업데이트하는 코드를 작성할 필요가 없습니다. 컨트롤의 데이터를 변경하는 사용자는 기본 데이터를 자동으로 변경합니다.

+0

저는 David와 있습니다. 드물게 Access에서 언 바운드 형식을 사용하고 일정한 시간, 시간 및/또는 두 배의 시간을 입력 할 수있는 시간대 응용 프로그램에서 한 번에 여러 레코드를 추가하는 등의 특정 요구 사항에 대해서만 사용합니다. –

+0

누군가가 무언가를 바꿀 때마다 모든 필드의 백업을 저장해야한다는 것이 문제입니다. 나는 변화의 역사를 다른 테이블에 넣었다. 나는 (어색하게, 언급 한 바와 같이)이 작업을 시도했다. (모든 txtBox는 양식로드 및 레코드 변경시 적절한 값으로 수동으로 설정된다.) txtAddress.setfocus 주소 = [myTable.address] [myTable.address] = txtAddress .text form.recordSource = "SELECT * FROM backupTable" [backupTable.Address] = address 필드에 대한 내 참조를 받아들이고 해당 필드를 변경하도록 액세스하는 중입니다.그리스어 인 레코드 세트를 사용하라고 들었습니다. 도움을 청합니다. –

+0

흠 댓글 앱이 반품을 가져 왔습니다. 죄송합니다. 읽기가 어렵습니다. –

관련 문제