목차
- 주의
MDB2GMS더 이상 사용되지 않습니다(참조GAMS 40 MDB2GMS 출시 노트). 이용해주세요에이전트 SQLReader 연결대신.
개요
MDB2GMS은 Microsoft Access 슬롯 커뮤니티베이스의 슬롯 커뮤니티를 GAMS에서 읽을 수 있는 형식으로 변환하는 도구입니다. 소스는 MS Access 슬롯 커뮤니티베이스 파일(.mdb 또는 .accdb)이고 대상은 aGAMS 포함 파일(.inc) 또는 aGAMS GDX 파일(.gdx).
- 참고
- MDB2GMS는 Windows에서만 사용할 수 있습니다.
명령줄 인수 없이 mdb2gms.exe 실행 파일을 실행하면 도구가 실행됩니다.대화형으로내장 GUI 인터페이스가 있습니다. 대안으로MDB2GMS실행 가능배치 모드는 사용자 개입 없이 GAMS 모델에서 직접 실행할 때 유용합니다.$call컴파일 시 명령 또는실행실행 시 명령.
데이터베이스 테이블은 GAMS 슬롯 커뮤니티의 일반화로 간주될 수 있습니다. GAMS 슬롯 커뮤니티에는 여러 개의 색인 열이 있지만 값 열은 하나뿐입니다. 테이블이 다중 값 테이블로 구성된 경우 SQL 문의 UNION 연산을 사용하여 올바른 GAMS 파일을 생성할 수 있습니다.
슬롯 커뮤니티베이스에 사용되는 슬롯 커뮤니티 유형에는 특별한 요구사항이 없습니다. 슬롯 커뮤니티는 문자열로 변환되며 이는 거의 항상 가능합니다. LONG BINARY와 같은 슬롯 커뮤니티 유형은 문자열로 변환되지 않을 수 있으며, 이 경우 예외가 발생합니다. 일반적으로 NULL은 GAMS 슬롯 커뮤니티 구조에 포함되어서는 안 됩니다. NULL 처리는 옵션에서 지정할 수 있습니다.
슬롯 커뮤니티 외에도 세트 데이터를 생성하는 것도 가능합니다.
요구사항
MDB2GMSWindows PC 및 MS Access가 설치된 경우에만 실행됩니다. MS Access는 특정 버전의 MS Office와 함께 제공되지만 일부 MS Office 버전에는 Access가 포함되어 있지 않습니다. 슬롯 커뮤니티베이스 레코드의 실제 검색은 다음에 의해 수행됩니다.DAO또는 슬롯 커뮤니티베이스에 액세스하기 위한 개체 계층인 슬롯 커뮤니티 액세스 개체. 실제 슬롯 커뮤니티베이스는 쿼리를 수행하고 슬롯 커뮤니티를 검색하는 Jet 엔진입니다. 또한 사용을 고려하십시오.SQL2GMS대신에MDB2GMS, MS Access가 시스템에 설치되어 있지 않은 경우.
이 도구를 효과적으로 사용하려면 다음에 대한 실무 지식이 필요합니다.SQL적절한 슬롯 커뮤니티베이스 쿼리를 작성하기 위해.
일괄 사용
MDB2GMS다음을 사용하여 GAMS 모델 내에서 사용자 개입 없이 배치 모드로 실행할 수 있습니다.$call관련.실행명령줄에서 모든 인수를 지정하는 동안 명령 프롬프트에서 직접 명령문을 작성하거나 명령 프롬프트에서 직접 실행할 수 있습니다. 갑MDB2GMS일괄 호출은 다음과 같은 형식입니다:
mdb2gms 입력파일 출력파일 queryString
적절한 일괄 호출에는 최소한 다음 세 가지 명령줄 인수가 포함됩니다:
- MS Access 슬롯 커뮤니티베이스 inputFile의 이름을 지정해야 합니다(.mdb 또는 .accbd 형식). 다음을 사용하세요.I파일 이름을 입력하는 인수, 예:
I=입력파일. - outputFile의 이름은 포함 파일(.inc) 또는 GDX 파일(.gdx) 중 하나를 지정해야 합니다. 포함 파일을 사용하여 쿼리 결과를 저장하는 것은 옵션으로 표시됩니다.
O즉,O=outputFile.inc, GDX 파일 사용은 옵션으로 표시됩니다.X즉,X=outputFile.gdx. - 슬롯 커뮤니티베이스에서 실행될 SQL 문을 포함하는 SQL queryString은 옵션 내에 지정되어야 합니다.
Q즉,Q=queryString.
또한 참조명령줄 인수29239_29326$call또는실행사용법은 오류가 발생하기 쉬우므로 정확하고 안정적인 호출을 얻으려면 약간의 시간이 필요합니다. 또는 다음을 사용하세요.대화형내장된 GUI 인터페이스를 사용하거나 외부 텍스트 파일에 명령줄 인수를 입력하여 보다 체계적이고 읽기 쉬운 명령을 작성할 수 있습니다. 외부 슬롯 커뮤니티 파일의 사용은 파일 이름 앞에를 붙여 표시합니다.@(표지판에서).
또한 섹션을 살펴보는 것을 고려하세요.전략, 배치 사용의 몇 가지 단점과 이를 극복하는 방법을 언급합니다.
만 지정하는 경우I=inputFile그런 다음 대화형 사용자 인터페이스는 명령줄 인수에 제공된 이름과 동일한 입력 파일 이름 편집 상자의 초기 설정으로 시작됩니다. 입력 파일, 출력 파일 및 쿼리 문자열이 제공되는 경우에만 호출이 일괄 호출로 간주됩니다.
명령줄 인수
다음 표에는 다음을 사용할 때 지정할 수 있는 명령줄 인수가 요약되어 있습니다.MDB2GMSGAMS 모델 또는 명령 프롬프트에서 직접.
| 인수 | 해석 | 기본값 | 설명 |
|---|---|---|---|
| I | 입력파일 | 없음 | 입력 파일의 이름을 지정하십시오(필수). |
| O | outputInclude파일 | 없음 | 출력 파일(.inc)의 이름을 지정하십시오. 둘 중 하나O=또는X=지정해야 합니다(또는 둘 다). |
| 켜짐 | n번째 출력IncludeFile | 없음 | 여러 쿼리가 사용되는 경우 n번째 쿼리를 n번째 출력 파일(.inc 형식)과 일치시킵니다. |
| X | outputGDX파일 | 없음 | 출력 파일(.gdx)의 이름을 지정하세요. 둘 중 하나O=또는X=지정되어야 합니다(또는 둘 다). |
| Q | 질의 | 없음 | 이 옵션은 SQL 쿼리를 지정하는 데 사용할 수 있습니다(필수). |
| Qn | n번째 쿼리 | 없음 | 여러 쿼리가 사용되는 경우 GDX에 쓸 때 n번째 쿼리를 n번째 출력 파일(.inc) 형식 또는 n번째 세트 또는 슬롯 커뮤니티 이름과 일치시킵니다. |
| S | 세트이름 | 없음 | GDX 파일에 쓰는 경우 이 옵션을 사용하여 GDX 파일 내에서 사용할 세트의 이름을 지정하십시오. |
| 스노 | n번째 setName | 없음 | 여러 쿼리가 사용되는 경우 n번째 쿼리를 GDX 파일의 n번째 세트와 일치시킵니다. |
| Y | setName (설명 텍스트 포함) | 없음 | GDX 파일에 쓰는 경우, 이 옵션을 사용하여 GDX 파일 내에서 사용할 세트의 이름을 지정하십시오. 설명 텍스트가 포함된 세트를 저장하려면 이 인수를 사용하세요. |
| 옌 | n번째 setName(설명 텍스트 포함) | 없음 | 여러 쿼리가 사용되는 경우 n번째 쿼리를 GDX 파일의 n번째 세트(설명 텍스트 포함)와 일치시킵니다. |
| P | 슬롯 커뮤니티 이름 | 없음 | GDX 파일에 쓰는 경우 이 옵션을 사용하여 GDX 파일 내에서 사용할 슬롯 커뮤니티의 이름을 지정하세요. |
| PN | n번째 슬롯 커뮤니티 이름 | 없음 | 여러 쿼리가 사용되는 경우 n번째 쿼리를 GDX 파일의 n번째 슬롯 커뮤니티와 일치시킵니다. |
| D | 디버그 | 비활성화 | 디버그 정보를 생성합니다. |
| B | 공백 인용 | 비활성화 | 공백이나 삽입된 따옴표가 포함된 경우 문자열을 인용하세요. |
| M | 음소거 | 비활성화 | 추가 정보가 로그 및 포함 파일에 기록되는지 제어합니다. |
| L | 목록 | 비활성화 | 슬롯 커뮤니티가 목록 파일에 포함되어 있는지 제어합니다. |
| @fileName | 내선 옵션 파일 | 없음 | 프로그램이 외부 텍스트 파일에서 옵션을 읽도록 합니다. |
| N | ini파일이름 | mdb2gms.ini | 다른 INI 파일의 사용법을 나타냅니다. |
| F | formatString | 없음 | 형식 문자열을 지정하세요. |
| W | 배선 | 없음 | 슬롯 커뮤니티베이스 열을 GAMS 색인 위치에 매핑합니다. |
| R | rowBatchSize | 100 | 행 배치 크기; 기본값은 100개 레코드입니다. |
명령줄 인수에 대한 좀 더 자세한 설명:
이 옵션은 필수이며 Access 슬롯 커뮤니티베이스가 포함된 .mdb 또는 .accbd 파일의 이름을 지정합니다. 파일에 공백이 포함된 경우 이름을 큰따옴표로 묶어야 합니다. Access에서 어떤 파일을 열지 혼동하지 않도록 절대 경로를 사용하는 것이 좋습니다. 네트워크에서UNC 이름을 사용할 수 있으며 다른 컴퓨터의 파일에 액세스할 수 있습니다.
"\\호스트 이름\c\내 문서\a.mdb."이 옵션은 일괄 처리에 필요합니다. .gms 파일이 있는 위치와 동일한 경로를 지정하려면 다음을 사용할 수 있습니다.
I=system.fpmydb.mdb이 옵션은 대부분의 예에서 설명됩니다. 참조예 1 - 단일 값 테이블 읽기예를 들어.
O=문자열(outputIncludeFile, 기본값 = 없음)
이 옵션은 출력 파일의 이름을 지정합니다. 출력 파일의 형식은 슬롯 커뮤니티 또는 집합 문에 대한 GAMS 포함 파일입니다. 디렉토리가 쓰기 가능한지 확인하세요.UNC 이름사용할 수 있습니다. 일괄 작업을 위해서는 출력 파일을 지정해야 합니다. 즉, 다음 중 하나입니다.
O=또는X=지정해야 합니다(또는 둘 다). 포함 파일은 다음을 사용하여 GAMS에서 읽을 수 있는 ASCII 파일입니다.$include40414_40593예 1 - 단일 값 테이블 읽기예를 들어.켜짐=문자열(outputIncludeFile, 기본값 = 없음)
하나의 쿼리에서 여러 쿼리를 사용하는 경우
MDB2GMS호출, 여러 쿼리에 대한 결과를 저장하는 포함 파일은 세트 또는 슬롯 커뮤니티 정의에서 포함 파일을 사용할 때 나중에 GAMS 모델에서 해석될 수 없으므로 쿼리와 출력 파일을 일치시키기 위해 숫자를 추가할 수 있습니다.
Q1="테이블에서 a, b 선택"
O1=ab.inc
Q2="테이블에서 c, d 선택"
O2=cd.inc또한 섹션 참조멀티 쿼리 일괄 사용또는예 7 - 다중 쿼리 일괄 예예를 들어.
X=문자열(outputGDXFile, 기본값 = 없음)
이 옵션은 출력 파일의 이름을 지정합니다. 출력 파일의 형식은 GAMS입니다.GDX 파일. 디렉토리가 쓰기 가능한지 확인하세요.UNC 이름사용할 수 있습니다. GDX 파일이 이미 존재하는 경우 덮어쓰게 됩니다. GDX 파일에 추가할 수 없습니다. 일괄 작업을 위해서는 출력 파일을 지정해야 합니다. 즉, 다음 중 하나입니다.
O=또는X=지정해야 합니다(또는 둘 다). 이 옵션은 다음에서 설명됩니다.예 5 - 설명 텍스트가 포함된 읽기 세트또는예 7 - 다중 쿼리 일괄 예예를 들어.이 옵션은 SQL 쿼리를 지정하는 데 사용할 수 있습니다. 쿼리에는 공백이 포함될 수 있으므로 큰따옴표로 묶어야 합니다. Access에서 허용되는 쿼리의 정확한 구문은 MS Access와 함께 제공되는 설명서를 참조하세요. 쿼리는 Jet 슬롯 커뮤니티베이스 엔진으로 직접 전달되므로 Access SQL의 완전한 성능과 표현력을 사용할 수 있습니다. 허용되는 표현에 대한 정확한 설명은 MS Access의 텍스트를 참조하세요.
주목할만한 구문 특징 중 하나는 필드 이름이나 테이블 이름에 공백이 포함되어 있으면 대괄호 안에 지정할 수 있다는 것입니다. 예:
Q="SELECT * FROM mytable"
Q="연도 선택, [생산 테이블]에서 생산"
Q="[GAMS 도시] 선택, [예제 테이블] 값, CityMapper WHERE [액세스 도시]=도시"이 옵션은 다음에서 설명됩니다.예 1 - 단일 값 테이블 읽기예를 들어
하나의 쿼리에서 여러 쿼리를 사용하는 경우
MDB2GMS호출, 여러 쿼리에 대한 결과를 저장하는 포함 파일은 세트 또는 슬롯 커뮤니티 정의에서 포함 파일을 사용할 때 나중에 GAMS 모델에서 해석될 수 없기 때문에 쿼리와 출력 파일을 일치시키기 위해 숫자를 추가할 수 있습니다. 또한 GDX에 쓸 때 쿼리 결과를 특정 세트 또는 슬롯 커뮤니티 이름과 일치시킬 수 있습니다.
Q1="테이블에서 a, b 선택"
O1=ab.inc
Q2="테이블에서 c, d 선택"
O2=cd.inc또는 (GDX 출력 파일 형식 - 여러 세트와 슬롯 커뮤니티를 단일 파일에 저장할 수 있음):
Q1="테이블에서 a, b 선택"
P1=abParameter
Q2="테이블에서 c 선택"
S2=cSet인수 사용법에 유의하세요PN관련.스노결과를 슬롯 커뮤니티 resp로 저장하기 위해. 설정 및 기호 이름을 지정합니다. 섹션도 참조하세요멀티 쿼리 일괄 사용또는예 7 - 다중 쿼리 일괄 예예를 들어.
GDX 파일에 쓰는 경우, 이 옵션을 사용하여 GDX 파일(쿼리 결과 포함)에 저장될 세트의 이름을 지정하십시오. 이 옵션은 다음에서 설명됩니다.예 4 - 다차원 집합 읽기.
하나의 쿼리에 여러 쿼리가 사용되는 경우
MDB2GMSGDX 파일에 쓰는 동안 호출, 이 옵션을 사용하여 GDX 파일(n번째 쿼리 결과 포함)에 저장될 n번째 세트의 이름을 지정합니다. 예:
Q1="테이블에서 i 선택"
S1=iSet
Q2="테이블에서 j 선택"
S2=jSet섹션도 참조하세요멀티 쿼리 일괄 사용또는예 7 - 다중 쿼리 일괄 예예를 들어.
GDX 파일에 쓰는 경우, 이 옵션을 사용하여 GDX 파일 내에서 사용할 세트의 이름을 지정하십시오. SQL 문의 select 절 내에 지정된 마지막 열이 설명 텍스트로 사용됩니다. 이 옵션은 다음에서 설명됩니다.예 5 - 설명 텍스트가 포함된 읽기 세트예를 들어.
하나의 쿼리에 여러 쿼리가 사용되는 경우
MDB2GMSGDX 파일에 쓰는 동안 호출, 이 옵션을 사용하여 GDX 파일(n번째 쿼리 결과 포함)에 저장될 n번째 세트(설명 텍스트 포함)의 이름을 지정합니다. 예
Q1="SELECT i, explTextForSeti FROM 테이블"
Y1=iSet
Q2="SELECT j, explTextForSetj FROM 테이블"
Y2=jSetSQL 문의 select 절에 지정된 마지막 열은 설명 텍스트로 사용됩니다.
GDX 파일에 쓰는 경우 이 옵션을 사용하여 GDX 파일(쿼리 결과 포함)에 저장될 슬롯 커뮤니티의 이름을 지정하세요.
하나의 쿼리에 여러 쿼리가 사용되는 경우
MDB2GMSGDX 파일에 쓰는 동안 호출, 이 옵션을 사용하여 GDX 파일(n번째 쿼리 결과 포함)에 저장될 n번째 슬롯 커뮤니티의 이름을 지정합니다. 예:
Q1="테이블에서 i, j, 값 선택"
A1=ijValue
Q2="테이블에서 n, m, 값 선택"
A2=nm값또한 섹션 참조다중 쿼리 일괄 사용또는예 7 - 다중 쿼리 일괄 예예를 들어.
이 옵션은 디버깅 목적으로 사용될 수 있습니다. 지정된 경우 가져오기 필터는 최소화되지 않고 "복원된" 즉, 일반 창으로 실행됩니다. 또한 사용자가 닫기 버튼을 클릭할 때까지 프로그램은 종료되지 않습니다. 이를 통해 실행 중에 발생할 수 있는 오류를 모니터링할 수 있습니다.
MDB2GMS.이 슬롯 커뮤니티가 지정되면 공백이 있는 문자열은 인용됩니다. 문자열이 이미 인용되어 있으면 이 단계는 수행되지 않습니다. 이름에 작은따옴표가 포함되어 있으면 주변 따옴표는 큰따옴표가 됩니다. 이름에 이미 큰따옴표가 포함되어 있으면 주변 따옴표는 작은따옴표가 됩니다. 문자열에 작은따옴표와 큰따옴표가 모두 있으면 모든 큰따옴표가 작은따옴표로 바뀌고 주변 따옴표는 큰따옴표가 됩니다. 기본적으로 이 옵션은 꺼져 있습니다. 자세한 내용은 하위 섹션을 참조하세요.인용문. 이 옵션은 출력 포함 파일에만 적용됩니다.
보통 또는 음소거 모드로 실행: 버전 번호, 슬롯 커뮤니티의 행 수, 경과 시간, 사용된 쿼리 등과 같은 추가 정보가 로그 및 포함 파일에 기록되지 않습니다.
다음 사이에 슬롯 커뮤니티 삽입
$offListing그리고$onListing달러 제어 옵션이므로 슬롯 커뮤니티가 목록 파일에 나열되지 않습니다. 이는 매우 큰 슬롯 커뮤니티 파일을 모델에 포함할 때 목록 파일의 크기를 줄이는 빠른 방법입니다. 그렇지 않으면 목록 파일이 너무 커서 편안하게 처리할 수 없게 됩니다.@fileName=문자열(파일 이름, 기본값 = 없음)
프로그램이 외부 텍스트 파일에서 옵션을 읽도록 합니다. 파일 이름에 공백이 포함된 경우 큰따옴표로 묶을 수 있습니다. 옵션 파일에는 명령줄에서 직접 지정한 것과 동일한 구문으로 한 줄에 하나의 옵션이 포함되어 있습니다. 또한 참조하세요명령 파일자세한 내용은.
N=문자열(파일 이름, 기본값 = mdb2gms.ini)
실행 가능한 mdb2gms.exe와 동일한 디렉토리에 있는 표준 mdb2gms.ini와 다른 INI 파일을 사용하십시오.
특별한 경우에는 포함 파일 출력에 형식 문자열을 적용할 수 있습니다(GDX 출력용 아님). 결과 집합의 각 열은 문자열이며 형식 문자열에서 s로 표시될 수 있습니다.
다음을 사용하여
W옵션을 사용하면 슬롯 커뮤니티베이스 열을 GAMS 색인 위치에 매핑할 수 있습니다. 모델 보기[배선]참고용.행 배치 크기; 기본값은 100개 레코드입니다. 이 옵션은 대화형 모드를 사용할 때 INI 파일에 지정되어야 합니다.
MDB2GMS.
예 1 - 단일 값 테이블 읽기
우리가 거리 슬롯 커뮤니티를 읽고 싶다고 가정합니다.[trn스포츠]53479_53594
간단한 SQL 문으로 슬롯 커뮤니티를 쿼리할 수 있습니다:
다음을 실행하여MDB2GMS문을 실행하면 Sample.mdb 슬롯 커뮤니티베이스에 대한 연결이 설정됩니다. 또한 슬롯 커뮤니티가 쿼리되고 그 결과는 나중에 GAMS 포함 파일(.inc)에 기록됩니다.
mdb2gms I=Sample.mdb Q="선택 도시1, 도시2, 거리 FROM 거리" O=distances.inc
MS Access 슬롯 커뮤니티베이스 파일 이름은 인수를 사용하여 지정됩니다.I. 문자열에 공백이 포함되어 있으므로 문자열은 따옴표로 묶여 있습니다. 인수Q그리고O쿼리와 출력 파일 이름(및 형식)을 지정하는 데 사용됩니다.
생성된 포함 파일 distances.inc는 다음과 같습니다:
* ----------------------------------------
* MDB2GMS 24.8.5 r61358 2017년 5월 10일 출시 VS8 x86 32bit/MS Windows
* Erwin Kalvelagen, GAMS 개발 공사
* ----------------------------------------
* DAO 버전: 14.0
* 제트 버전: 4.0
* 슬롯 커뮤니티베이스: F:\datalib\Sample.mdb
* 쿼리: SELECT city1, city2, distance FROM 거리
* ----------------------------------------
시애틀.뉴욕 2.5
샌디에고.뉴욕 2.5
시애틀.시카고 1.7
샌디에고.시카고 1.8
시애틀.토피카 1.8
샌디에고.토피카 1.4
* -------------------------------------------
주석이 달린 헤더 섹션은 다음에 대한 일부 정보를 요약합니다.MDB2GMSresp. GAMS 버전 및 실행된 데이터베이스 쿼리에 대한 정보입니다. 표준 내보내기 형식은 마지막 열을 값 열(거리 포함)로 간주하고 이전 열을 인덱스(도시 이름 포함)로 간주하는 것입니다. 색인은 점으로 구분되므로 생성된 포함 파일을 GAMS 모델의 슬롯 커뮤니티 선언문의 일부로 사용할 수 있습니다.
다음을 사용하여 슬롯 커뮤니티 검색MDB2GMS데이터베이스에서 수집하고 슬롯 커뮤니티 선언문 내 GAMS 모델에 쿼리된 데이터를 포함하는 작업(컴파일 시)은 다음과 같은 방식으로 결합될 수 있습니다.
설정
i '통조림 식물' / 시애틀, 샌디에고 /
j 'markets' / 뉴욕, 시카고, 토피카 /;
$call mdb2gms I=Sample.mdb Q="도시1, 도시2, 거리 FROM 거리 선택" O=distances.inc
슬롯 커뮤니티 d(i,j) '거리(천 마일)' /
$include 거리.inc
/;
디스플레이 d;
마지막으로 슬롯 커뮤니티의 값D표시됩니다:
뉴욕 시카고 토피카 시애틀 2.500 1.700 1.800 샌디에고 2.500 1.800 1.400
이 예는 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부이기도 합니다. 모델 참조[거리1]참고용. 쿼리 결과는 GDX 파일에도 추가로 기록됩니다.
예 2 - 다중 값 테이블 읽기
이 시나리오에서는 두 사람이 세 개의 인덱스 열을 읽기를 원합니다.년, loc, 프로드및 값 열판매그리고이익데이터베이스 파일 Sample.mdb에서. 따라서 두 개의 별도 슬롯 커뮤니티와 쿼리를 사용하거나 대안으로 추가 인덱스 위치가 있는 슬롯 커뮤니티를 사용합니다(for판매응답.이익) 및 UNION 선택.
두 개의 값 열이 있는 테이블을 생각해 보세요.판매그리고이익:
두 개의 별도 슬롯 커뮤니티
이를 GAMS로 가져오는 간단한 방법은 두 개의 슬롯 커뮤니티와 두 개의 SQL 쿼리를 사용하는 것입니다. SQL 쿼리는 다음과 같습니다.
다음 명령을 실행하여 포함 파일 sales.inc를 생성할 수 있습니다:
mdb2gms I=Sample.mdb Q="슬롯 커뮤니티에서 연도, 위치, 생산, 판매 선택" O=sales.inc
매출 및 관련 인덱스 열을 선택하기 위해 첫 번째 쿼리를 지정한다는 점에 유의하세요.Q인수. 쿼리 결과는 다음을 사용하여 sales.inc에 기록됩니다.O인수. 마찬가지로 이익과 관련 인덱스 열을 얻기 위해 두 번째 쿼리를 지정하는 동안 다음 명령을 실행하여 포함 파일profit.inc를 생성합니다.
mdb2gms I=Sample.mdb Q="슬롯 커뮤니티에서 연도, 위치, 생산, 이익 선택" O=profit.inc
다음을 사용하여 슬롯 커뮤니티 검색MDB2GMS데이터베이스 Sample.mdb에서 쿼리된 데이터를 슬롯 커뮤니티 선언문 내 GAMS 모델에 포함판매그리고이익(컴파일 시) 다음과 같은 방법으로 결합할 수 있습니다:
설정
연도 '년' / 1997*1998 /
loc '위치' / nyc, was, la, sfo /
PRD '제품' / 하드웨어, 소프트웨어 /;
$call mdb2gms I=Sample.mdb Q="데이터에서 연도, 위치, 생산, 매출 선택" O=sales.inc
슬롯 커뮤니티 판매량(연도,loc,prd) /
$include sales.inc
/;
$call mdb2gms I=Sample.mdb" Q="데이터에서 연도, 위치, 생산, 이익 선택" O=profit.inc
슬롯 커뮤니티 이익(연도,loc,prd) /
$include 이익.inc
/;
이 예는 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부이기도 합니다. 모델 참조[SalesProfitDB1]참고용.
추가 색인 위치가 있는 단일 슬롯 커뮤니티
다른 GAMS 데이터 구조를 사용하여 작업을 한 번에 수행할 수도 있습니다. 즉, 단일 슬롯 커뮤니티가 추가 색인으로 정의됩니다.유형슬롯 커뮤니티 유형(매출 또는 이익)을 나타냅니다. 인덱스 및 값 열은 다음 SQL 문에 의해 선택됩니다. 결과와 문자열 'sales'를 결합하기 위한 UNION 연산을 참고하세요. 나중에 슬롯 커뮤니티 유형을 식별하기 위해 'profit'을 사용합니다.
다음 명령을 실행하여 슬롯 커뮤니티에 액세스하고 쿼리하고 data.inc에 기록합니다.
mdb2gms @howToRead.txt
명령의 가독성을 높이기 위해 아래에 표시된 외부 슬롯 커뮤니티 파일 HowToRead.txt의 사용에 유의하십시오(한 줄에 하나의 인수, 따옴표는 생략 가능):
I=Sample.mdb Q=SELECT 연도, loc, prod, 'sales', sales FROM 슬롯 커뮤니티 UNION SELECT 연도, loc, prod, 'profit', 수익 FROM 슬롯 커뮤니티 O=data.inc
생성된 포함 파일 data.inc는 다음과 같습니다(프레젠테이션을 위해 단축됨):
* ----------------------------------------
* MDB2GMS 24.8.5 r61358 2017년 5월 10일 출시 VS8 x86 32bit/MS Windows
* Erwin Kalvelagen, GAMS 개발 공사
* ----------------------------------------
* DAO 버전: 14.0
* 제트 버전: 4.0
* 슬롯 커뮤니티베이스: F:\datalib\Sample.mdb
* 쿼리: SELECT year, loc, prod, 'sales', sales FROM 슬롯 커뮤니티 UNION SELECT year, loc, prod, 'profit', 수익 FROM 슬롯 커뮤니티
* ----------------------------------------
1997.la.hardware.profit 8
1997.la.hardware.sales 80
1997.la.software.profit 16
1997.la.software.sales 60
1997.nyc.hardware.profit 5
1997.nyc.hardware.sales 110
1997.nyc.software.profit 10
1997.nyc.software.sales 100
1997.sfo.hardware.profit 9
1997.sfo.hardware.sales 80
1997.sfo.software.profit 10
1997.sfo.software.sales 50
1997.was.hardware.profit 7
1997.was.hardware.판매 120
1997.was.software.profit 20
1997.was.software.sales 70
1998.la.hardware.profit 6
1998.la.hardware.sales 70
* -------------------------------------------
다음을 사용하여 슬롯 커뮤니티 검색 중MDB2GMS데이터베이스에서 수집하고 슬롯 커뮤니티 선언 내 GAMS 모델에 쿼리된 데이터를 포함하면(컴파일 시) 다음과 같은 방법으로 결합할 수 있습니다(슬롯 커뮤니티에는 네 번째 색인이 있음에 유의하세요.유형슬롯 커뮤니티 유형에 접근하기 위해판매응답.이익):
$onEcho >howToRead.txt
나=Sample.mdb
Q=SELECT 연도, loc, prod, 'sales', sales FROM 데이터 UNION SELECT 연도, loc, prod, 'profit', 수익 FROM 데이터
O=data.inc
$offEcho
세트
연도 '년' / 1997*1998 /
loc '위치' / nyc, was, la, sfo /
PRD '제품' / 하드웨어, 소프트웨어 /
'데이터 유형' 유형 / 매출, 이익 /;
$call mdb2gms @howToRead.txt
슬롯 커뮤니티 데이터(연도,loc,prd,유형) /
$include data.inc
/;
이 예는 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부이기도 합니다. 모델 참조[SalesProfitDB2c]참고용.
예 3 - 1차원 집합 읽기
이 예는 MS Access 슬롯 커뮤니티베이스 파일의 단일 열에서 1차원 집합의 집합 요소를 읽는 방법을 보여줍니다. City1 열을 읽고 싶다고 가정합니다(표 참조).거리) 세트를 정의하기 위해I64394_64646
포함 파일 city1.inc는 다음과 같습니다(표현을 줄이기 위해 헤더 정보가 제거되었습니다):
* ----------------------------------------
샌디에고
시애틀
* -------------------------------------------
모든 단계(다음을 통한 슬롯 커뮤니티 액세스MDB2GMS, 정의 집합)을 결합할 수 있습니다.
$call mdb2gms I=Sample.mdb Q="선택 개별(도시1) FROM 거리" O=city_i.inc
내가 '통조림 공장'으로 설정/
$include city_i.inc
/;
나는 표시;
display 문은 목록 파일에 다음 출력을 생성합니다:
---- 56개 세트 시애틀, 샌디에고
예 4 - 다차원 집합 읽기
슬롯 커뮤니티베이스에서 다차원 집합을 읽고 결과를 다음을 사용하여 포함 파일에 쓸 때O인수에서는 다차원 집합의 요소로 해석되려면 포함 파일의 요소가 올바른 형식을 가져야 한다는 점을 관찰해야 합니다. 예를 들어, 다음을 포함하는 줄은a B c은(는) 3차원 집합의 고유 집합 요소로 인식되지 않습니다. 특히, 단일 요소 사이에 마침표를 추가해야 합니다. 즉,a.B.c정확하게 해석됩니다.
SQL 문 내에 이러한 마침표를 명시적으로 추가하는 방법에는 여러 가지가 있습니다. 예: select 절에 따옴표로 묶인 공백을 추가하여 더미 값 필드를 추가합니다(index1, index2, index3 및 dataTable은 일부 자리 표시자입니다).
또는 select 절 내에 명시적으로 마침표를 추가하여(|| 또는 DBMS에 따라 &):
예를 들어, 2차원 집합을 정의한다고 가정해 보겠습니다.
ij(i,j) '통조림 공장 - 시장' 설정;
테이블의 슬롯 커뮤니티를 기반으로거리Sample.mdb에 저장되어 있습니다. 다음MDB2GMS문은 슬롯 커뮤니티베이스에 연결하고, 도시 이름이 있는 열을 쿼리하고, 집합 요소 사이에 마침표를 만들기 위해 빈 값 필드를 추가합니다.
mdb2gms I=Sample.mdb Q="SELECT city1, city2, ' ' FROM 거리" O=city_ij.inc
포함 파일 city_ij.inc는 다음과 같습니다(표현을 줄이기 위해 헤더 정보가 제거되었습니다):
* ----------------------------------------
시애틀.뉴욕 ''
SAN-DIEGO.NEW-YORK ''
시애틀.시카고 ''
샌디에고.시카고 ''
시애틀.토피카 ''
SAN-DIEGO.TOPEKA ''
* -------------------------------------------
빈 값 필드를 추가하지 않으면 결과 포함 파일은 다음과 같습니다(단축).
* ----------------------------------------
시애틀 뉴욕
샌디에이고 뉴욕
* -------------------------------------------
마침표가 누락되었기 때문에 선은 2차원 집합의 유효한 요소로 인식되지 않습니다. 모든 단계는 다음과 같은 방식으로 결합될 수 있습니다.
설정
i '통조림 식물' / 시애틀, 샌디에이고 /
j 'markets' / 뉴욕, 시카고, 토피카 /;
$call mdb2gms I=Sample.mdb" Q="SELECT city1, city2, ' ' FROM 거리" O=city_ij.inc
ij(i,j) '2차원 집합' 설정 /
$include city_ij.inc
/;
ij를 표시;
display 문은 목록 파일에 다음 출력을 생성합니다:
---- 75 SET ij 2차원 세트
뉴욕 시카고 토피카
샌디에고 예 예 예
시애틀 예 예 예
다음을 사용하여 결과가 GDX 파일에만 기록되는 경우 다차원 집합을 읽을 때 명시적으로 마침표를 추가할 필요가 없다는 점에 유의하세요.X그리고S관련.Y인수, 즉 쿼리를 수정할 필요가 없습니다.
사용 시MDB2GMS다음과 같은 방법으로:
mdb2gms I=Sample.mdb Q="SELECT index1, index2, index3 FROM 슬롯 커뮤니티 테이블" X=setData.gdx S=setName
이는 이름이 3차원 세트인 setData.gdx 파일을 생성합니다.세트이름쿼리 결과가 포함되어 있습니다.
예 5 - 설명 텍스트가 포함된 읽기 세트
이 예에서는 다음을 사용하여 MS Access 슬롯 커뮤니티베이스 파일에서 설명 텍스트가 있는 세트 요소를 읽는 방법을 보여줍니다.MDB2GMS. 먼저 쿼리 결과를 포함 파일에 쓰고 나중에는Y쿼리 결과를 설명 텍스트가 포함된 세트로 GDX 파일에 저장하기 위한 인수입니다.
설명 텍스트가 포함된 열의 공백과 혼합 따옴표를 참고하세요. 다음 쿼리를 통해 슬롯 커뮤니티에 액세스할 수 있습니다.
포함 파일에 쿼리 결과 쓰기
Select 절의 마지막 열은 설명 텍스트로 사용됩니다. 인수를 추가하는 것을 명심하세요.B공백이나 따옴표가 포함된 텍스트 문자열을 처리하기 위해. 다음 GAMS 코드는 슬롯 커뮤니티에 액세스하고 결과를 포함 파일 setData.inc에 기록합니다.
$call mdb2gms I=Sample.mdb B Q="SELECT setElement, explText FROM setData" O=setData.inc
/를 설정하세요
$include setData.inc
/;
결과 포함 파일은 다음과 같습니다(표현을 줄이기 위해 헤더 정보가 제거됨):
* ----------------------------------------
firstSetElement "첫 번째 '설정 요소'에 대한 설명 텍스트"
secondSetElement '두 번째 "설정 요소"에 대한 설명 텍스트''
thirdSetElement "세 번째 '설정 요소'에 대한 설명 텍스트"
fourthSetElement '네 번째 세트 요소에 대한 설명 텍스트'
* -------------------------------------------
설명에 따라 따옴표 처리에 유의하십시오.B.
GDX 파일에 쿼리 결과 쓰기
GDX 파일에 설명 텍스트가 있는 세트로 쿼리 결과를 저장할 때 포함된 공백이나 따옴표를 수동으로 관찰할 필요가 없으며 대신 다음을 사용할 수 있습니다.Y인수. SQL 문의 select 절에 지정된 마지막 열은 설명 텍스트로 해석됩니다. 다음 GAMS 코드는 슬롯 커뮤니티에 액세스하고 결과를 GDX 파일 setData.inc에 기록합니다.
$call mdb2gms I=Sample.mdb Q="SELECT setElement, explText FROM setData" X=setData.gdx Y=set_b
세트 b;
$gdxIn setData.gdx
$로드 b = set_b
$gdxIn
GDX 파일의 세트 이름은 다음과 같습니다.set_b(내부에 지정됨Y인수), GDX 파일의 이름은X인수.
예 6 - 인덱스 매핑
어떤 경우에는 슬롯 커뮤니티베이스에 사용된 색인 요소가 GAMS 모델과 동일하지 않습니다. 예: GAMS 모델이 집합을 다음과 같이 정의한 경우를 생각해 보세요.
i / NY, DC, LA, SF /;로 설정
이제 슬롯 커뮤니티 테이블이 다음과 같다고 가정합니다:
이것은 'new york'를 'NY' 등으로 매핑해야 함을 의미합니다. 이 매핑은 GAMS 또는 슬롯 커뮤니티베이스 두 곳에서 수행될 수 있습니다.
GAMS에서 수행된 인덱스 매핑
테이블을 직접 내보낼 때 다음 포함 파일을 얻습니다(표현을 줄이기 위해 헤더 정보가 제거됨):
* ----------------------------------------
'뉴욕' 100
'로스앤젤레스' 120
'샌프란시스코' 105
'워싱턴 DC' 102
* -------------------------------------------
옵션을 활성화하면 작은따옴표가 추가됩니다.B(인용 공백), 색인 요소에 공백이 포함되어 있기 때문입니다. 슬롯 커뮤니티에 액세스하고 결과 포함 파일을 가져오고 이를 다른 색인 공간으로 변환하는 작업은 다음 GAMS 코드를 통해 수행할 수 있습니다.
i / NY, DC, LA, SF / 설정;
'데이터베이스에서' / '뉴욕', '워싱턴 DC', '로스앤젤레스', '샌프란시스코' /로 idb 설정;
$call mdb2gms I=Sample.mdb B O="city1.inc" Q="도시 선택, [예제 테이블]에서 값"
슬롯 커뮤니티 dbdata(idb) /
$include city1.inc
/;
Set mapindx(i,idb) / NY.'뉴욕', DC.'워싱턴 dc', LA.'로스앤젤레스', SF.'샌프란시스코' /;
슬롯 커뮤니티 데이터(i);
데이터(i) = 합계(mapindx(i,idb), dbdata(idb));
데이터 표시;
display 문은 목록 파일에 다음 출력을 생성합니다:
---- 47 슬롯 커뮤니티 데이터 뉴욕 100.000, DC 102.000, LA 120.000, SF 105.000
이 예는 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부이기도 합니다. 모델 참조[IndexMapping1]참고용.
슬롯 커뮤니티베이스에서 인덱스 매핑이 완료됨
두 번째 접근 방식은 슬롯 커뮤니티베이스 내부에서 매핑을 처리하는 것입니다. 다음과 같은 매핑 테이블을 도입할 수 있습니다.
이 테이블은 조인에서 쿼리를 실행하여 사용할 수 있는 형식으로 슬롯 커뮤니티를 내보내는 데 사용할 수 있습니다.
결과 포함 파일은 다음과 같습니다(표현을 줄이기 위해 헤더 정보가 제거됨):
* ----------------------------------------
라 120
뉴욕 100
SF105
직류 102
* -------------------------------------------
모든 단계는 GAMS 모델에서 결합될 수 있습니다:
i / NY, DC, LA, SF / 설정;
$onEcho >howToRead.txt
I=샘플.mdb
Q=SELECT [GAMS 도시], [값] FROM example_table, CityMapper WHERE CityMapper.[액세스 도시]=example_table.city
O=city2.inc
$offEcho
$call mdb2gms @howToRead.txt
슬롯 커뮤니티 데이터(i) /
$include city2.inc
/;
데이터 표시;
display 문은 목록 파일에 다음 출력을 생성합니다:
---- 38개 슬롯 커뮤니티 데이터 뉴욕 100.000, DC 102.000, LA 120.000, SF 105.000
참고:MS Access에서는 공백이 포함된 테이블 이름을 허용합니다. 이 경우 테이블 이름을 대괄호로 묶을 수 있습니다. 다른 슬롯 커뮤니티베이스에서는 이를 허용하지 않을 수 있습니다.
이 예는 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부이기도 합니다. 모델 참조[IndexMapping2]참고용.
다중 쿼리 일괄 사용
어떤 경우에는 동일한 슬롯 커뮤니티베이스에서 여러 개의 작은 쿼리를 수행해야 합니다. 그러나 여러 개인MDB2GMSAccess를 시작하고 슬롯 커뮤니티베이스를 여는 데 상당한 오버헤드가 있으므로 실행 비용이 많이 들 수 있습니다. 이러한 경우에는 한 번의 호출로 여러 쿼리를 수행할 수 있는 옵션을 추가했습니다. 단일에서 여러 쿼리를 실행하려면MDB2GMS쿼리 결과가 포함된 여러 GAMS 포함 파일을 호출하고 작성합니다. 명령줄 인수를 사용할 수 있습니다.Qn그리고켜짐. 다중 쿼리 호출의 구조는 다음과 같습니다.
I=sample.mdb Q1=첫 번째 쿼리 O1=출력파일이름.inc Q2=두 번째 쿼리 O2=출력파일이름.inc Q3=세 번째 쿼리 O3=출력파일명.inc
약관첫 번째 쿼리, 두 번째 쿼리등. 일부 SQL 문의 자리 표시자입니다. 우리는 다음과 같은 주장을 봅니다.Qn인수와 일치함켜짐. 이는 n번째 쿼리의 결과가 n번째 출력 파일에 기록된다는 의미입니다.
다중 쿼리 호출의 결과를 단일 GDX 파일에 저장하려는 경우 명령줄 인수를 사용할 수 있습니다.Qn, 스노, PN그리고옌. GDX 파일에 쓸 때 다중 쿼리 호출의 구조는 다음과 같습니다.
I=sample.mdb
X=sample.gdx
Q1=첫 번째 쿼리
S1=세트이름
Q2=두 번째 쿼리
S2=세트이름
Q3=세 번째 쿼리
A3=슬롯 커뮤니티 이름
Q4=네 번째 쿼리
A4=세트이름
다시 말씀드리지만, 약관첫 번째 쿼리, 두 번째 쿼리등. 일부 SQL 문의 자리 표시자입니다. 여기서 우리는 쿼리를 볼 수 있습니다.Qn세트 이름 중 하나와 일치함스노또는 슬롯 커뮤니티 이름PN, 즉 첫 번째 쿼리의 결과는 이름이 내에 지정된 세트로 저장됩니다.S1인수, 세 번째 쿼리의 결과는 이름이 지정된 슬롯 커뮤니티로 저장됩니다.P3인수 등.X인수는 GDX 파일의 이름을 지정하는 데 사용됩니다.
완전한 예를 보려면 섹션을 참조하세요.예 7 - 다중 쿼리 일괄 예.
예 7 - 다중 쿼리 일괄 예
예제 슬롯 커뮤니티베이스로 다음 액세스 테이블(파일 Sample.mdb)을 사용합니다.
우리는 다음 정보를 추출하고 싶습니다:
- 세트년
- 세트loc
- 세트prd
- 슬롯 커뮤니티판매
- 슬롯 커뮤니티이익
출력: 여러 포함 파일
이것은 단일 쿼리에서 다음 GAMS 코드를 사용하여 수행할 수 있습니다.MDB2GMS호출(집합 요소를 고유하게 유지하기 위해 결과가 집합으로 사용되는 쿼리의 선택 절에서 구별 연산자의 사용법에 유의하십시오):
$onEcho >howToRead.txt
I=샘플.mdb
Q1=데이터에서 고유한(연도) 선택
O1=연도.inc
Q2=데이터에서 고유한(loc) 선택
O2=loc.inc
Q3=데이터에서 고유(생산) 선택
O3=prod.inc
Q4=데이터에서 제품, 위치, 연도, 판매 선택
O4=sales.inc
Q5=데이터에서 생산, 위치, 연도, 이익 선택
O5=profit.inc
$offEcho
$call =mdb2gms @howToRead.txt
y '년' 설정 /
$include year.inc
/;
loc '위치' 설정 /
$include loc.inc
/;
PRD '제품' 설정 /
$include prod.inc
/;
슬롯 커뮤니티 판매량(prd,loc,y) /
$include sales.inc
/;
디스플레이 판매;
슬롯 커뮤니티 이익(prd,loc,y) /
$include 이익.inc
/;
이익 표시;
이 예는 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부이기도 합니다. 모델 참조[SalesProfitDB3]참고용.
출력: 단일 GDX 파일
GDX 파일을 통해 가져온 동일한 예는 다음과 같습니다:
$onEcho >howToRead.txt
I=샘플.mdb
X=샘플.gdx
Q1=데이터에서 고유한(연도) 선택
S1=연도
Q2=데이터에서 고유한(loc) 선택
S2=loc
Q3=데이터에서 고유(생산) 선택
S3=prd
Q4=데이터에서 제품, 위치, 연도, 판매 선택
P4=매출
Q5=데이터에서 생산, 위치, 연도, 이익 선택
P5=이익
$offEcho
$call =mdb2gms @howToRead.txt
세트
y '년'
loc '위치'
PRD '제품';
슬롯 커뮤니티
매출(prd,loc,y)
이익(prd,loc,y);
$gdxIn Sample.gdx
$load y=연도 PRD LO 매출 이익
$gdxIn
매출, 이익 표시;
의 부름GDX뷰어은 독립형 GDX 뷰어에 GDX 파일을 표시합니다. 이 예는 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부이기도 합니다. 모델 참조[SalesProfitDB4]참고용.
대화형 사용
명령줄 슬롯 커뮤니티 없이 도구를 호출하면 대화형으로 시작됩니다. 이 방법을 사용하면 내장된 대화형 환경을 사용하여 데이터베이스 파일(.mdb 또는 .accbd 파일), 쿼리 및 최종 대상 파일(GAMS 포함 파일 또는 GDX 파일)을 지정할 수 있습니다. 기본 화면(아래 그림 참조)에는 아래에 설명된 여러 버튼과 편집 상자가 포함되어 있습니다.
- 입력 파일(.mdb 또는 .accbd). 입력파일을 지정하는 콤보박스입니다. 또한 참조하세요입력파일좀 더 자세한 설명을 원하시면. 찾아보기 버튼을 사용하면 파일을 더 쉽게 지정할 수 있는 파일 열기 대화 상자를 시작할 수 있습니다. 파일은 표기법을 사용하여 원격 시스템에 있을 수 있습니다.
\\machine\directory\file.mdb.
- GAMS 포함 파일(*.inc) 출력. GAMS 포함 파일을 생성하려면 여기에서 대상 파일을 지정하세요. 또한 참조하세요outputInclude파일좀 더 자세한 설명을 원하시면.
- GDX 파일(*.gdx) 출력. GAMS 포함 파일 대신 도구에서 다음을 생성할 수도 있습니다.GDX 파일. 출력 파일 중 하나 또는 둘 다를 지정해야 합니다. 또한 참조하세요outputGDX파일좀 더 자세한 내용을 보려면.
- SQL 쿼리. SQL 쿼리 상자는 쿼리를 제공하는 장소입니다. 텍스트의 실제 영역은 표시된 것보다 더 클 수 있습니다. 스크롤하려면 커서 키를 사용하십시오. 또한 참조하세요Q좀 더 자세한 설명을 원하시면. 허용되는 표현에 대한 정확한 설명은 MS Access의 텍스트를 참조하세요.
- 진행 메모. 이 메모 필드는 응용 프로그램의 진행 상황을 표시하는 데 사용됩니다. 또한 슬롯 커뮤니티베이스의 오류 메시지도 여기에 인쇄됩니다. 읽기 전용 필드입니다.
- 위의 편집 상자에는 이전에 사용된 파일 이름과 쿼리에 빠르게 액세스하는 데 사용할 수 있는 드롭다운 목록이 있습니다(이전 세션에서도).
- 그테이블 버튼입력 파일 편집 라인에서 선택한 슬롯 커뮤니티베이스 파일의 내용이 포함된 새 창이 나타납니다. 이를 통해 올바른 SQL 쿼리를 지정하는 데 필요한 모든 테이블 이름과 필드 이름을 볼 수 있습니다. 입력 편집 줄에 슬롯 커뮤니티베이스 파일 이름이 지정되지 않으면 예외가 생성됩니다.
- 그옵션 버튼다양한 옵션을 지정할 수 있는 창이 팝업됩니다.
- 누르면도움말 버튼이 문서를 보여줄 것입니다.
- 누르면확인 버튼쿼리를 실행하고 포함 파일 또는 GDX 파일이 생성됩니다.
- 누르면일괄 버튼현재 쿼리를 배치 환경의 GAMS에서 직접 실행할 수 있는 방법에 대한 정보를 제공합니다. 일괄 호출이 표시되며 클립보드에 복사할 수 있습니다. GAMS Studio에서 누르세요.
Ctrl-C또는 선택편집|붙여넣기클립보드의 내용을 GAMS 텍스트 파일로 복사합니다.
- 누르는 중닫기 버튼응용프로그램을 종료합니다. 현재 설정은 INI 파일에 저장되므로 실행할 때
MDB2GMS다시 모든 현재 설정이 복원됩니다.
옵션
그옵션창은 옵션 버튼을 눌러 생성할 수 있습니다:
옵션 창에서는 다음 옵션을 사용할 수 있습니다:
- 인용 공백:공백이나 삽입된 따옴표가 포함된 경우 문자열을 인용합니다. 또한 참조하세요B자세한 내용은 참고하세요.
- 음소거:포함 파일에 추가 정보 텍스트(예: 사용된 쿼리 등)를 포함하지 마십시오.
- 목록 없음:포함 파일을 다음으로 묶습니다.
$offListing그리고$onListing그러면 슬롯 커뮤니티가 목록 파일에 반영되지 않습니다. 동등한 명령줄 인수는 다음과 같습니다.L.
- SQL 형식:SQL 텍스트가 SQL 편집 상자에 다시 로드되면 형식이 지정됩니다. 키워드는 CAPS로 인쇄되고 FROM 및 WHERE 절은 자체 라인에 인쇄됩니다. 이 확인란을 선택 취소하면 이 형식이 적용되지 않고 SQL 쿼리가 있는 그대로 표시됩니다.
다음 옵션은 특별한 경우에만 필요합니다:
- NULL:이 라디오 상자는 NULL이 처리되는 방법을 결정합니다. 색인 위치나 값 열에 NULL이 있으면 일반적으로 쿼리 결과가 쓸모 없게 됩니다. 즉, GAMS 레코드가 유효하지 않게 됩니다. NULL에 대해 경고하려면 예외를 발생시키는 기본값이 안전한 선택입니다. 특별한 경우에는 NULL을 빈 문자열이나 'NULL' 문자열에 매핑할 수 있습니다.
- 출력 라인:기본적으로 출력 라인은 다음과 같이 생성됩니다. 모든 첫 번째 n-1 필드는 인덱스로 간주되고 마지막 n 번째 열은 값입니다. 이 상황에 해당하는 형식은 '%s.%s.%s %s'`(3차원 슬롯 커뮤니티의 경우)입니다. 특별한 경우에는 사용되는 형식 문자열을 수정하고 싶을 수도 있습니다. 필드는 모두 문자열로 간주되므로 s만 형식 자리 표시자로 사용하세요. 결과 집합에 있는 열과 정확히 동일한 개수의 s를 지정해야 합니다.
버튼에는 분명한 기능이 있습니다:
- 확인 버튼변경사항을 수락합니다.
- 취소 버튼변경 사항을 무시하고 모든 옵션 설정은 이전 값으로 되돌아갑니다.
- 도움말 버튼이 도움말 텍스트를 표시합니다.
전략
모델 내부의 슬롯 커뮤니티베이스에서 슬롯 커뮤니티를 추출하기 위해 SQL 문을 포함하면 여러 가지 어려움이 발생할 수 있습니다.
- 슬롯 커뮤니티베이스는 실행 사이에 변경될 수 있으며, 이로 인해 재현할 수 없는 결과가 발생할 수 있습니다. 가능한 시나리오는 사용자가 다음과 같이 불만을 제기하는 것입니다. 이상한 결과". 확인을 위해 모델을 실행했는데 이제 결과가 괜찮습니다. 그 이유는 슬롯 커뮤니티베이스의 슬롯 커뮤니티가 변경되었기 때문일 수 있습니다.
- 슬롯 커뮤니티베이스에서 슬롯 커뮤니티를 추출하는 데 상당한 오버헤드가 있습니다. 슬롯 커뮤니티베이스에서 새 슬롯 커뮤니티를 가져올 필요가 없다면 GAMS에서 직접 액세스할 수 있는 형식으로 로컬에 저장된 스냅샷을 사용하는 것이 좋습니다.
- 추출된 슬롯 커뮤니티를 보는 것이 도움이 되는 경우가 많습니다. 첫 번째 이유는 슬롯 커뮤니티가 올바르게 도착했는지 확인하는 것입니다. 또 다른 주장은 슬롯 커뮤니티를 다른 방식으로 보는 것이 슬롯 커뮤니티를 더 잘 이해할 수 있다는 것입니다. 완전한 '내부' 접근 방식은 특정 모델 동작을 이해하는 데 어려움을 초래할 수 있습니다.
종종 모델 로직의 나머지 부분에서 슬롯 커뮤니티 추출 단계를 분리하는 것이 좋은 전략입니다.
하위 모델이 다음과 같이 체인이나 트리를 형성하는 경우:
슬롯 커뮤니티 추출 --> 슬롯 커뮤니티 조작 --> 모델 정의 --> 모델 솔루션 --> 보고서 작성
우리는 저장/재시작 기능을 편리하게 사용할 수 있습니다. 개별 하위 모델은 다음과 같이 코딩됩니다.
- 0단계: sr0.gms
$onText 0단계: 데이터베이스에서 데이터 추출 다음으로 실행: > gams sr0 save=s0 $offText 세트 나는 '공급업체' j '수요 센터'; 슬롯 커뮤니티 수요(j) 공급(i) dist(i,j) '거리'; $onEcho > HowtoRead.txt 나=교통.mdb Q1=공급업체에서 이름 선택 O1=i.inc Q2=수요 센터에서 이름 선택 O2=j.inc Q3=이름 선택, 수요 센터의 수요 O3=수요.inc Q4=이름 선택, 공급업체로부터 공급 O4=공급.inc Q5=공급업체 선택, 수요 센터, 거리별 거리 O5=dist.inc $offEcho $call =mdb2gms.exe @howtoRead.txt 내가 설정 / $include i.inc /; j / 설정 $include j.inc /; 슬롯 커뮤니티 수요 / $include 수요.inc /; 슬롯 커뮤니티 공급/ $include 공급.inc /; 슬롯 커뮤니티 거리 / $include dist.inc /; i, j, 수요, 공급, dist를 표시합니다. - 1단계: sr1.gms
$onText 1단계: 데이터 조작 단계 다음으로 실행: > gams sr1 restart=s0 save=s1 $offText 스칼라 f '1,000마일당 케이스당 운임(달러)' / 90 /; 슬롯 커뮤니티 c(i,j) '케이스당 운송 비용(단위: 수천 달러)'; c(i,j) = f*dist(i,j)/1000; - 2단계: sr2.gms
$onText 2단계: 모델 정의 다음으로 실행: > gams sr2 restart=s1 save=s2 $offText 변수 x(i,j) '케이스의 선적 수량' z '총 운송 비용(천 달러)'; 양수 변수 x; 방정식 비용 '목적 함수 정의' esupply(i) '플랜트 i의 공급 제한을 준수합니다.' edemand(j) '시장 j의 수요를 충족'; 비용.. z =e= sum((i,j), c(i,j)*x(i,j)); esupply(i)..sum(j, x(i,j)) =l= 공급(i); edemand(j).. sum(i, x(i,j)) =g= 수요(j); - 3단계: sr3.gms
$onText 3단계: 모델 솔루션 다음으로 실행: > gams sr3 restart=s2 save=s3 $offText 옵션 lp = cplex; 모델 운송 / 모두 /; z를 최소화하는 lp를 사용하여 전송을 해결합니다. - 4단계: sr4.gms
$onText 4단계: 보고서 작성 다음으로 실행: > gams sr4 restart=s3 $offText abort$(transport.modelStat <> 1) "모델이 최적으로 해결되지 않았습니다."; x.l, z.l 표시;
모든 단계를 실행하는 모델은 다음과 같이 작성할 수 있습니다:
'=gams.exe sr0 lo=3 save=s0' 실행;
abort$errorLevel "0단계 실패";
'=gams.exe sr1 lo=3 재시작=s0 저장=s1'을 실행합니다.
abort$errorLevel "1단계 실패";
'=gams.exe sr2 lo=3 재시작=s1 저장=s2'를 실행합니다.
abort$errorLevel "2단계 실패";
'=gams.exe sr3 lo=3 재시작=s2 저장=s3'을 실행합니다.
abort$errorLevel "3단계 실패";
'=gams.exe sr4 lo=3 restart=s3'을 실행합니다.
abort$errorLevel "4단계 실패";
보고 단계만 변경하는 경우, 즉 다음을 사용하여 일부 출력을 생성하는 경우PUT문을 변경한 경우 4단계만 변경하고 다시 실행하면 됩니다. 솔버 또는 솔버 옵션을 변경하는 경우 3단계와 4단계만 다시 실행하면 됩니다. 이와 같은 작은 모델의 경우 이 연습은 그다지 유용하지 않을 수 있지만 모델이 크고 모든 단계가 복잡하고 비용이 많이 드는 경우 많은 경우에 더 빠른 처리 시간을 달성할 수 있는 편리한 방법입니다.
모델[MDBSr5]또한 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부입니다.
어떤 경우에는 저장/재시작 기능이 적합하지 않습니다. 보다 일반적인 접근 방식은 슬롯 커뮤니티베이스의 슬롯 커뮤니티를 GDX 파일에 저장하여 다른 모델에서 사용할 수 있도록 하는 것입니다. 0단계의 모델을 사용하여 슬롯 커뮤니티를 GDX 파일에 저장할 수 있습니다.
MDB2GDX1.gms
'=gams.exe sr0 lo=3 gdx=trnsport.gdx' 실행;
abort$errorLevel "0단계 실패";
'=gdxviewer.exe trnsport.gdx'를 실행합니다.
모델[MDB2GDX1]또한 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부입니다.
우리는 또한 할 수 있습니다MDB2GMSGDX 파일 생성:
MDB2GDX2.gms
이 모델은 Access 슬롯 커뮤니티베이스(Transportation.mdb 파일)의 슬롯 커뮤니티를 GDX 파일에 저장하는 방법을 보여줍니다.
$onEcho >howToRead.txt
나=교통.mdb
X=교통.gdx
Q1=공급업체에서 이름 선택
S1=i
Q2=수요 센터에서 이름 선택
S2=j
Q3=이름 선택, 수요 센터에서 수요
P3=수요
Q4=이름 선택, 공급자로부터 공급
P4=공급
Q5=공급업체, 수요센터, 거리 FROM 거리 선택
P5=거리
$offEcho
$call =mdb2gms.exe @howToRead.txt
첫 번째 접근 방식은 슬롯 커뮤니티베이스에서 sr0.lst 목록 파일의 GDX 파일로 이동된 슬롯 커뮤니티에서 완전한 감사 레코드를 사용할 수 있다는 장점이 있습니다. 슬롯 커뮤니티베이스에서 무엇이 나왔고 이것이 GDX 파일에 어떻게 저장되었는지 궁금해하는 사람이 있다면 해당 파일이 답을 제공합니다.
모델[MDB2GDX2]또한 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부입니다.
GDX 슬롯 커뮤니티를 로드하려면 다음 조각을 사용할 수 있습니다:
GDXTRNSPORT.gms
이 모델은 컴파일 타임에 GDX 파일에서 운송 슬롯 커뮤니티를 로드하는 방법을 보여줍니다.
설정
나는 '공급업체'
j '수요 센터';
슬롯 커뮤니티
수요(j)
공급(i)
dist(i,j) '거리';
$gdxIn Transportation.gdx
$load i j 수요 공급 dist
i, j, 수요, 공급, dist를 표시합니다.
DBTimestamp1.gms
한 응용프로그램에서는 매일 아침 모델을 처음 실행할 때 슬롯 커뮤니티베이스에서 슬롯 커뮤니티를 검색해야 했습니다. 나머지 시간에는 그날 아침에 추출한 슬롯 커뮤니티를 사용할 수 있습니다. 다음 논리로 이를 구현할 수 있습니다.
$onText
매일 아침 슬롯 커뮤니티베이스에서 슬롯 커뮤니티를 먼저 검색합니다.
$offText
$onEcho > getdate.txt
나=%system.fp%transportation.mdb
Q=요일 선택(지금())
O=dbtimestamp.inc
$offEcho
$존재하지 않는 경우 dbtimestamp.inc $call "echo 0 > dbtimestamp.inc"
스칼라 dbtimestamp '슬롯 커뮤니티가 검색된 날짜' /
$include dbtimestamp.inc
/;
스칼라 currentday '이 실행 날짜';
현재일 = gday(jnow);
"비교", dbtimestamp, 현재일 표시;
if(dbtimestamp <> 현재날짜,
'=gams.exe sr0 lo=3 gdx=transportation.gdx'를 실행합니다.
abort$errorLevel "0단계(슬롯 커뮤니티베이스 액세스) 실패";
'=mdb2gms.exe @getdate.txt'를 실행합니다.
);
포함 파일 dbtimestamp.inc에는 슬롯 커뮤니티베이스에서 슬롯 커뮤니티가 추출된 날짜(1,..,31)가 포함되어 있습니다. 이 파일이 없으면 0으로 초기화합니다. 그런 다음 이 숫자를 해당 월의 현재 날짜와 비교합니다. 숫자가 일치하지 않으면 슬롯 커뮤니티베이스 추출 단계를 실행하고 dbtimestamp.inc 파일을 다시 작성합니다. 이 마지막 작업은 다음을 사용하여 수행할 수 있습니다.PUT문이지만 이 경우에는 SQL 문을 사용했습니다.
모델[DBTimestamp1]또한 GAMS 슬롯 커뮤니티 유틸리티 라이브러리의 일부입니다.
명령 파일
슬롯 커뮤니티는 명령 파일에서 지정할 수 있습니다. 명령줄 길이가 255자를 초과하는 경우 이는 중요합니다. 이는 GAMS가 명령줄에 허용하는 길이에 대한 엄격한 제한입니다. 다음과 같이 긴 명령줄을 지정하는 대신:
$call =mdb2gms I="c:\My Documents\test.mdb" O="c:\My Documents\data.inc" Q="SELECT * FROM mytable"
다음과 같은 명령줄을 사용할 수 있습니다.
$call =mdb2gms @"c:\내 문서\options.txt"
명령 파일
c:\내 문서\options.txt
다음과 같이 보일 수 있습니다.
I=c:\내 문서\test.mdb O=c:\내 문서\data.inc Q=SELECT * FROM mytable
다음을 사용하여 GAMS 모델 내부에서 명령 파일을 작성할 수 있습니다.$echo명령. 다음 예에서는 이를 보여줍니다.
$set cmdfile "c:\windows\temp\commands.txt"
$echo "I=E:\models\labordata.mdb" > "%cmdfile%"
$echo "O=E:\models\labor.INC" >> "%cmdfile%"
$echo "Q=SELECT * FROM 노동" >> "%cmdfile%"
$call =mdb2gms @"%cmdfile%"
슬롯 커뮤니티 p /
$include "E:\models\labor.INC"
/;
디스플레이 p;
GAMS의 최신 버전에서는 다음을 사용할 수 있습니다.$onEcho그리고$offEcho명령:
$set cmdfile "c:\windows\temp\commands.txt"
$onEcho > "%cmdfile%"
I=E:\models\labordata.mdb
O=E:\models\labor.INC
Q=SELECT * FROM 노동
$offEcho
$call =mdb2gms @"%cmdfile%"
슬롯 커뮤니티 p /
$include "E:\models\labor.INC"
/;
디스플레이 p;
문자열을 공백으로 묶는 따옴표는 다음과 같습니다.Q=SELECT * FROM 노동외부 슬롯 커뮤니티 파일 사용시 생략 가능합니다.
쿼리가 너무 길어지면 여러 줄에 걸쳐서 펼칠 수 있습니다. 설정이 다음 줄에 계속된다는 신호를 보내려면 \ 문자를 마지막 문자로 삽입하십시오. 예:
Q=슬롯 커뮤니티에서 제품, 위치, 연도, '판매', 판매를 선택하세요 \
유니온\
슬롯 커뮤니티에서 생산, 위치, 연도, '이익', 이익을 선택하세요.
참고
GDX 파일
GDX 파일에는 바이너리 형식의 GAMS 슬롯 커뮤니티가 포함되어 있습니다. 다음 GAMS 명령은 GDX 파일에서 작동합니다.$gdxIn, $로드, execute_load, execute_unload. GDX=filename 명령줄 인수는 모든 슬롯 커뮤니티를 GDX 파일에 저장합니다. GDX 파일은 다음을 사용하여 GAMS Studio에서 볼 수 있습니다.파일|열기.
UNC 이름
UNC는 통합 명명 규칙을 의미합니다. UNC 이름은 네트워크를 통해 파일 이름을 지정하는 Microsoft 규칙입니다. 일반적인 형식은 다음과 같습니다.
\\<서버>\<공유>\<경로>\<파일>
예:
\\athlon\c\내 문서\MDB2GMS.rtf
인용문
옵션 시 인덱스 처리 예B공백이 포함된 문자열을 인용하는 데 사용됩니다:
| 입력 | 출력 | 비고 |
|---|---|---|
| 안녕하세요 | 안녕하세요 | 공백 또는 삽입된 따옴표 |
| "안녕하세요" | "안녕하세요" | 터치됨, 이미 인용됨 |
| '안녕하세요' | '안녕하세요' | id. |
| "안녕하세요' | "안녕하세요' | id이지만 GAMS에서는 오류가 발생합니다 |
| 오브라이언 | "오'브리앙" | |
| '오'브리앙' | '오'브리앙' | 터치하면 GAMS에서 오류가 발생합니다 |
| 예술"피셜 | '예술"피셜' | |
| art"ifi'cial | "인공적인" |
$CALL 명령
그$callGAMS의 명령은 다음 위치에서 외부 프로그램을 실행합니다.컴파일 시간. 두 가지 형태가 있습니다:
그$콜105382_105471
$call externalProgram
$call =externalProgram
앞에 '='가 없는 버전은 명령 프로세서(command.com 또는 cmd.exe)를 통해 외부를 호출합니다. '='가 있는 두 번째 버전은 명령 프로세서를 우회하고 외부 프로그램을 직접 실행합니다. 몇 가지 차이점을 언급하겠습니다.
- 일부 명령은 외부 프로그램이 아니라 명령 프로세서의 내장 명령입니다. 예를 들면 COPY, DIR, DEL, ERASE, CD, MKDIR, MD, REN, TYPE이 있습니다. 이러한 명령을 실행하려면 다음 양식을 사용해야 합니다.
$call externalProgram명령 프로세서를 사용합니다. - 배치 파일(.bat 또는 .cmd 파일)을 실행하려면 다음 양식을 사용해야 합니다.
$call externalProgram. - 외부 프로그램이 존재하지 않는 경우 적절한 오류 메시지로 중지하는 것이 중요하다면 다음 양식만 사용하십시오.
$call =externalProgram. 이 점에서 다른 형식은 신뢰할 수 없습니다. 이는 놀라운 결과로 이어질 수 있으며 상황을 디버깅하기 어려운 경우가 많으므로 일반적으로 다음 형식을 사용하는 것이 좋습니다.$call =externalProgram. - 순수한 Windows 프로그램을 호출할 때 두 번째 형식을 호출하는 것이 중요합니다. 첫 번째 양식은 외부 Windows 프로그램이 완료될 때까지 기다리지 않습니다. Windows 프로그램 호출 시 명령 프로세서를 사용하는 것이 중요한 경우에는
시작명령, 다음과 같습니다:$call start /w externalWindowsProgram. 그렇지 않으면 다음을 사용하는 것이 좋습니다.$call =externalWindowsProgram.
- 주의
- 일반적으로 다음을 사용하는 것이 좋습니다.
$call =externalProgram더 나은 오류 처리를 위한 버전입니다.
명령줄 인수를 외부 프로그램에 전달해야 하는 경우 공백으로 구분하여 줄에 추가할 수 있습니다.
$call externalProgram 슬롯 커뮤니티1 슬롯 커뮤니티2
$call =externalProgram 슬롯 커뮤니티1 슬롯 커뮤니티2
명령줄의 총 길이는 255자를 초과할 수 없습니다. 프로그램 이름이나 슬롯 커뮤니티에 공백이나 따옴표가 포함되어 있으면 이를 인용해야 합니다. 작은따옴표나 큰따옴표를 사용할 수 있습니다. 일반적으로 다음 구문이 작동합니다.
$call '"외부 프로그램" "슬롯 커뮤니티 1" "슬롯 커뮤니티 2"'
$call ="외부 프로그램" "슬롯 커뮤니티 1" "슬롯 커뮤니티 2"
첫 번째 양식에서는 GAMS의 $call 구문 분석 버그로 인해 전체 명령줄에 추가 따옴표가 필요하다는 점에 유의하세요. 두 번째 양식은 추가 따옴표 없이 작동합니다.만약=는 큰따옴표 밖에 표시됩니다.
컴파일 시간 명령
모두$GAMS의 명령은 컴파일 타임에 수행됩니다. 다른 모든 문은 실행 시 실행됩니다. 이는 컴파일 시간 명령이 실행된다는 의미입니다.이전에실행 시간 명령(아래일지라도). 예를 들어 다음을 고려하십시오.
파일 배치파일 / x.bat /;
putClose 배치파일 "dir"/;
$call x.bat
이 조각은 이미 컴파일하는 동안 올바르게 작동하지 않습니다.$콜이 실행되는 반면, put 문은 컴파일 단계가 종료되고 GAMS가 실행 단계를 시작한 후에만 실행됩니다. 위의 코드는 다음과 같이 배치 파일 쓰기를 컴파일 시간으로 이동하여 수정할 수 있습니다.
$echo "dir" > x.bat
$call x.bat
또는 외부 프로그램 호출을 실행 시간으로 이동하여:
파일 배치파일 / x.bat /;
putClose 배치파일 "dir"/;
x.bat를 실행합니다.
모두 주목하세요$명령은 세미콜론을 포함하지 않지만 줄 끝으로 종료됩니다.