2009-07-13 5 views
1

가능한 중복 :
Query Syntax error삽입 문 where 절

내가 아래 명령

DoCmd.RunSQL = "insert into tblContract(
Empid, 
Start1, 
Finish1, 
Store1, 
Start2, 
Finish2, 
Store2) 
values ('" & Me.txtEmpNo.Value & "','" 
    & Me.txtContSunStart1.Value & "', '" 
    & Me.txtContSunFinish1.Value & "','" 
    & Me.txtContSunStore1.Value & "','" 
    & Me.txtContSunStart2.Value & "', '" 
    & Me.txtContSunFinish2.Value & "','" 
    & Me.txtContSunStore2.Value & "')" 

를 사용하여 삽입 값을 원하는 그러나 삽입하는 동안이 곳 값 행에 삽입해야 같은 테이블에있는 열 (testid)은 다른 테이블의 max (testid)입니다. 작동하지

이 쿼리 :

SQL은 = & Me.txtEmpNo.Value &을 " '" INSERT INTO tblContract은 (EMPID는 testid를가 Start1는 Finish1은 상점 만들기, START2, Finish2, 상점 2가) SELECT " MAX (testid를) ' "& Me.txtContSunStart1.Value &' ',' '& Me.txtContSunFinish1.Value &' ',' '& Me.txtContSunStore1.Value &' ',' '& Me.txtContSunStart2. 값 & " ',' "& Me.txtContSunFinish2.Value & '', ''& Me.txtContSunStore2.Value &" ' "& "tbltesting FROM' "

나는 이것에 대한 대안을 발견하고있다. ms 액세스에서 컴파일 오류가 발생합니다.

+0

당신이 의미하는 바를 약간 명확하게해야합니다 ... 존재하는 행에 아무 것도 삽입 할 수 없으므로 업데이트됩니다. – Guffa

+2

http://stackoverflow.com/questions/1119246/query-syntax-error 정확한 복제물 – gbn

+0

스토어드 프로 시저 또는 매개 변수가있는 쿼리를보고 싶을 수도 있습니다. 특히 공개 직면 인 경우 매우 안전합니다. SQL 주입 공격. –

답변

3

INSERT VALUES 대신 INSERT SELECT를 사용할 수 있습니다. 와 같은.

INSERT INTO MyTable (ColumnA, ColumnB, ColumnC) SELECT 'A', 'B', MAX(ColumnC) FROM MyOtherTable 

다른 메모에서 SQL을 실제로 빌드하지 마십시오. 이것은 SQL Injection에 취약합니다. 누군가는 텍스트 상자 중 하나에 "DROP TABLE tblContract"를 쉽게 입력 할 수 있습니다!

+0

Er, Access는 DoCmd.RunSQL 명령으로 여러 명령문을 실행하지 않습니다. "SQL 문 끝 뒤의 문자가 유효하지 않습니다"라는 오류 메시지가 나타납니다. –

+0

BTW는 사용자 입력의 유효성을 검사하지 말아야한다는 것을 의미하지는 않습니다. 단지 인용 된 SQL 삽입 예제가 Access (또는 일괄 처리 된 SQL 문을 지원하지 않는 Jet/ACE의 모든 형식)에서 발생할 수 없다는 것입니다. –

1

먼저 다른 테이블에서 값을 가져 와서이 테이블에 삽입하는 데 사용해야합니다. 트리거를 사용하여이 작업을 수행 할 수도 있습니다. 2 명의 사용자가 동시에 같은 쿼리를 실행하는 경우 동일한 값을 두 번 가질 수 있습니다 ...이 경우 다른 테이블을 잠글 필요가 있습니다 ... max() 문제가 있습니다

ID를 사용하지 않는 이유는 무엇입니까? 그런 다음 scope_identity() 함수를 사용하여 다른 테이블에 삽입 한 후 잡을 수 있습니까?

당신은 또한 무슨 일을하는 것은 SQL 인젝션 공격이 당신이 동시성 문제가 발생할 수 있습니다을주의 할

INSERT INTO tblContract(col1..., testId) values 
    ('value1',..., (SELECT MAX(testID) FROM tblOther)); 

를 원하는 제대로 질문을 읽으면

+2

VBA 응용 프로그램에서의 SQL 삽입은 큰 문제가 될 수 없습니다. –

+0

그래, 얼마나 오래 VBA 응용 프로그램이 될 것입니까? 이러한 것들은 종종 자신의 삶을 얻고 포팅 – n8wrl

+0

mgroves, 일부 사람들은 웹 인터페이스로 액세스를 사용합니다. 또한 외부인뿐만 아니라 불만을 가진 직원으로부터 데이터를 보호해야한다고 생각하지 않습니까? SQ1 주사는 회사 외부에서 나올 필요가 없습니다. 게다가, "공격에 개방적인가?"와 같은 것들을 생각하는 것은 그가 Access에서 멀어 질 때이 사람의 경력에 ​​도움이 될 것입니다. – HLGEM

0

일이 기다리고 있음을 이해

+0

이것이 내가해야 할 필요가 있다고 생각한 방법입니다. – Powerlord

+3

그리고 일부! 이것은 따라야 할 좋은 습관이 아니며 지금 스탬프 처리해야합니다! 미리 외래 키 값을 알고 값을 삽입하거나 동일한 트랜잭션에 두 테이블을 삽입하십시오. – Randolpho