2009-11-10 1 views
4

오랜 시간 동안 다른 작업을 수행 한 후에 Access로 돌아 오면 실제로 버그가있는 것이 하나 있습니다. 즉, 디자인에서 무의식적으로 쿼리를 열면 디자이너가 SQL을 나타낼 수없는 경우 (유효하더라도) 디자이너가 쿼리를 '수정'하여 실행 취소 할 수 있습니다.Access가 디자인 모드로 전환 할 때 이해할 수없는 쿼리를 엉망으로 만들지 말 것

해결 방법이 있습니까? 옵션을 통해 적어도 질문을 먼저 얻을 수 있습니까?

(액세스 2007)

+0

서식이 손실되었다는 것을 의미합니까? 아니면 "수정"이 실제로 쿼리의 내용을 변경한다는 의미입니까? 나는 후자를 보지 못했다. – hawbsl

+1

나는 후자를 의미한다. 나는 그것을 보았다. – Benjol

답변

-1

당신이 액세스 UI는 사용자의 SQL 코드에 무엇을 좋아하지 않는 경우에, 왜 당신은 심지어 당신의 SQL을 보려고 할 것인가? 그것은 인간의 독자를 돕기 위해 추가되었을 수있는 예쁜 형식이나 여백을 지 웁니다. 그것은 심지어 SQL 요인을 다시 할 수 있습니다, 미국 형식으로 날짜 리터럴 하위 쿼리에 대한 브래킷 괄호하는 PROCEDURE에서 매개 변수 구문하는 VIEW의 열 상관 이름의 손실 등

당신을 위해 더 나은 방법처럼 소리 SQL Data Definition Language (SQL DDL) 스크립트를 사용하여 데이터베이스 오브젝트를 작성한 다음 나중에 유지 보수를 위해 스크립트를 참조하십시오. 지금은 액세스 UI가 액세스 데이터베이스 엔진의 기능의 일부를 노출시키는 능력이있다 경험 (알고

CREATE TABLE Constants 
(
lock CHAR(1) WITH COMPRESSION 
    DEFAULT 'x' 
    NOT NULL, 
    CONSTRAINT Constants__max_one_row 
     CHECK (lock = 'x'), 
pi DECIMAL(3, 2) NOT NULL 
) 
; 
INSERT INTO Constants (pi) VALUES (3.14) 
; 
CREATE TABLE Things 
(
thing_ID CHAR(10) WITH COMPRESSION NOT NULL 
    CONSTRAINT uq__Things UNIQUE, 
    CONSTRAINT thing_ID__numeric_chars_only 
     CHECK (thing_ID NOT ALIKE '%[!0-9]%'), 
thing_name VARCHAR(20) DEFAULT '{{NONE}}' NOT NULL, 
    CONSTRAINT thing_name__whitespace 
     CHECK (
       thing_name NOT ALIKE ' %' 
       AND thing_name NOT ALIKE '% ' 
       AND thing_name NOT ALIKE '% %' 
       AND LEN(thing_name) > 0 
      ) 
) 
; 
CREATE PROCEDURE AddThing 
(
arg_thing_ID CHAR(10), 
arg_thing_name VARCHAR(20) = '{{NONE}}' 
) 
AS 
INSERT INTO Things (thing_ID, thing_name) 
SELECT thing_ID, thing_name 
    FROM (
     SELECT RIGHT('0000000000' + arg_thing_ID, 10) AS thing_ID, 
       IIF(LEN(arg_thing_name) = 0, '{{NONE}}', arg_thing_name) 
       AS thing_name  
      FROM Constants 
     ) AS DT1 
WHERE thing_ID NOT ALIKE '%[!0-9]%' 
     AND thing_name NOT ALIKE ' %' 
     AND thing_name NOT ALIKE '% ' 
     AND thing_name NOT ALIKE '% %' 
; 
CREATE VIEW Stuff 
(
stuff_ID, stuff_name 
) 
AS 
SELECT T1.thing_ID, T1.thing_name 
    FROM Things AS T1 
WHERE ' ' & T1.thing_name & ' ' ALIKE '% stuff %' 
; 

:

예를 들어

, 여기에 일부 데이터베이스 오브젝트를 작성하는 Access 데이터베이스 엔진 SQL의 DDL 스크립트입니다 CHECK 제약 조건, CHAR() 데이터 형식, WITH COMPRESSION 속성 등) 쿼리 개체의 SQL보기에서 구문을 변경하려고 할 수 있습니다. 하위 쿼리의 parens, PROCEDURE의 매개 변수 - 쿼리 호출, 열 상관 관계 주장 VIEW에 대한 이름 목록 - 쿼리 호출 등을 주장 할 것입니다. 하지만 누가 신경 쓰냐? 스키마를 변경해야한다면 SQL DDL 스크립트를 기반으로하고 Access UI가 내 스크립트에서 생각한 바를 따르지 않을 것입니다.

내 선택의 SQL 편집기를 자유롭게 사용할 수 있습니다. 데이터 요소와 별도로 키워드 색을 지정하고, 자동 완성 기능, 선택한 쿼리 요소 들여 쓰기 기능 등이 있습니다.

+0

어, 그걸 확장 할 수 있니? 디자인보기로 작성할 수없는 쿼리가 있기 때문에 SQL을보고 싶습니다. SQL DDL을 사용할 때의 작업주기는 무엇입니까 (무엇이든지간에)? – Benjol

+0

@onedayone : 당신은 Access를 좋아하지 않으며 당신은 내장 된 툴에 적대적입니다. 왜 당신은 그것을 사용하는 것에 대한 조언을 계속합니까? –

+0

@ David W. David : "너는 Access를 좋아하지 않아": LOL! 연극 평론가가 연극을 좋아하지 않는다고 말하는 것과 같습니다 :) 누군가가 SQL 인터페이스를 개선하면 Access 데이터베이스 엔진을 좋아할 것입니다. "당신은 기본 제공 도구에 적대적입니다"나는 Access의 SQL보기에 "적대적"이 아니므로 그냥 사용하지 않아서 사용하지 않아도됩니다 (필수는 아닙니다!). 영업 이익도 동일한 접근 방식을 취할 수 있습니다."왜 그걸 사용하는 것에 대한 조언을 계속합니까?": 나는 확신하지 못합니다. Access UI는 우수한 SQL 기능을 가진 SQL Server와 잘 어울린 것 같습니다. 대신 SQL Server를 권장합니다. – onedaywhen

1

검색어를 테이블에 저장하는 경향이 있습니다. 양식은 쿼리를 볼 수 있습니다 그리고 약간의 코드는, 예를 들어, 테스트를위한 쿼리를 작성하기에 충분 :

CurrentDb.CreateQueryDef "TempQueryName", Me.SQL 

물론, 먼저 쿼리가 존재하는지 여부를 테스트하는 것이 현명 할 것이다.

또한 SQL에서 코드와 RecordSource 및 컨트롤 소스에 사용할 테이블을 DLookUp 할 수 있습니다.

+1

하하, 실제로 Access를 사용하지 않고 Access를 사용하는 방법 :) – Benjol

관련 문제