Database 매뉴얼 · Chapter 1

Database 튜토리얼 시작

이 튜토리얼은 QMachineStudio 와 함께 배포되는 SampleProject/Database/DB_Sqlite 프로젝트를 처음부터 끝까지 따라가며 데이터베이스 기능을 익히는 방식으로 구성되어 있습니다.

샘플은 SQLite 한 개로 동작하며, 주문 작업 이력(order_history 테이블)을 화면에서 등록 · 수정 · 삭제하는 작은 도구입니다. 매뉴얼에서 다루는 모든 코드는 이 프로젝트의 RunScript/*.xms 파일을 그대로 발췌한 것입니다.

샘플 프로젝트 위치

SampleProject/Database/DB_Sqlite/
├── DB_Sqlite.xmp                  # 프로젝트 파일 (DatabaseOption 포함)
├── XDatabase/
│   ├── connections.json           # 연결 설정 (DB Studio 동기)
│   └── LocalDB.db                 # 실제 SQLite 파일 (자동 생성)
└── RunScript/
    ├── Data.xms                   # DB_* 함수들 (Open/Refresh/Insert/Update/Delete/...)
    ├── ViewRun.xms                # 버튼 핸들러 (OnOpenClick / OnAddClick / ...)
    ├── ModifyDlg.xms              # 레코드 수정 다이얼로그
    └── (기타 Init / Mon / Event / ViewMain ...)

화면 구성 — ViewRun

런 페이지(ViewRun)는 6개의 버튼과 1개의 XDataGrid 로 이루어집니다.

버튼호출 함수동작
OpenData::DB_Open()DB 연결 + (비어있으면) 샘플 5건 삽입 + DataGrid 갱신
AddData::DB_InsertSample()신규 주문 1건 INSERT
UpdateData::DB_UpdateSelected()선택 행을 작업 완료(end_time / result) 처리
ModifyData::DB_OpenModifyDlg()다이얼로그를 띄워 자유롭게 편집 후 OK 시 UPDATE
DeleteData::DB_DeleteSelected()선택 행 1건 삭제
CloseData::DB_Close()연결 종료 + DataGrid 비우기

상단에는 Data::DbStatusText 라벨(● OPEN / ● CLOSED) 이 현재 연결 상태를 표시합니다.

핵심 키워드 — DB["연결이름"]

스크립트에서 데이터베이스는 항상 연결 이름 으로 접근합니다. 샘플의 연결 이름은 local 한 개입니다.

// 연결 열기
DB["local"].Open();
 
// SELECT 후 RowCount / GetRowArray 로 결과 읽기
DB["local"].RunSqlSelect("SELECT id, order_no, menu_name FROM order_history ORDER BY id ASC");
int rows = DB["local"].RowCount;
 
// 단일 값
int total = DB["local"].RunSqlScalarInt("SELECT COUNT(*) FROM order_history");
 
// 파라미터 바인딩 (SQL 인젝션 방지)
array p[] = {""};  p.Clear();
p.Add("O1234"); p.Add("Latte"); p.Add(SYS.DateTimeString);
DB["local"].RunSqlQueryParam(
    "INSERT INTO order_history(order_no, menu_name, start_time) VALUES(?,?,?)",
    p);
 
// 트랜잭션
DB["local"].BeginTransaction();
DB["local"].RunSqlQueryParam(/* ... */);
if( DB["local"].Commit() == false ) DB["local"].Rollback();
 
// 연결 종료
DB["local"].Close();

IO["..."], MOTOR["..."] 와 같은 이름 기반 인덱서 컨벤션이라 처음 접해도 어색하지 않습니다.

학습 흐름

챕터주제다루는 샘플 코드
2연결 설정 — connections.json 과 프로젝트 옵션DB_Sqlite.xmp DatabaseOption
3테이블 스키마 — order_historyDB_InsertInitialSamples
4DB Studio 의 SQL · Data 탭으로 동작 검증
5INSERT · UPDATE — 파라미터 바인딩과 트랜잭션DB_InsertSample · DB_UpdateSelected
6SELECT — RowCount · GetRowArray · RunSqlScalarIntDB_Refresh
7DataGrid · ModifyDlg 바인딩DispData · SelectIndex · Edit*
8버튼 이벤트 — ViewRun 핸들러OnOpenClick 외 5개
9백업 · WAL · 운영 체크포인트DatabaseOption.BackupFolder

샘플을 실행해 결과를 직접 확인하면서 챕터를 따라가는 것을 권장합니다.