Xojo + SQLite로 플레이

5827 단어 SQLite3Xojo
RDBMS 앱의 강의를 할 때 사용하는 백엔드는 MySQL 라든지군요.
하지만 참가자의 수중의 PC로 체험하면 간편하게 사용할 수 있는 SQLite가 편리.
스토리지로 파일을 하나 넣는 것만으로 서비스를 움직이지 않아도 좋고, Python 등에는 표준으로 드라이버가 들어 있기 때문에 ODBC가 어떻게든 생각하지 않아도 좋다.

Xojo도 SQLite가 디폴트로 취급할 수 있다. 그 외에도 PostgreSQL, MySQL, Oracle, Microsoft SQL Server에 접속하는 기능이 표준으로 들어있어 우수.

이번에 Xojo에서 SQLite를 조작해 본다.

Xojo의 함정



처음에 함정이 기다리고 있다고는! Xojo에는 RDBMS 사용하는 유틸리티가 붙어 있다.



이 그림을 보면 우선 table을 만들어 이름을 변경. 그리고는 이 툴로 필드와 타입을 만들면 좋다.



이것은 편하게 ...라고 생각하지만 이것은 함정.

이 툴을 사용하고 싶은 충동을 굉장히 모아 SQLite의 전용 툴을 따로 움직이자.

(도구의 결함의 상세는 말미에 기재.)

SQLite를 CUI로 조작



SQLite의 클라이언트 툴을 환경에 맞추어 인스톨.

시작하면 이런 화면이 된다.

SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

먼저 데이터베이스 파일을 만듭니다.

.open sensordata.sqlite

테이블 만들기

create table if not exists sensor (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 sensor integer,
 temp real,
 hemi real
);

테이블 생성 확인

.tables

하나만 데이터 넣어 보자

INSERT INTO sensor ( sensor,temp,hemi ) VALUES (1,22.0,85.0);


데이터가 들어갔는지 확인
select * from sensor;
1|1|22.0|85.0

몇 가지 데이터를 넣어보십시오.
select * from sensor;
1|1|22.0|85.0
2|1|14.0|85.0
3|1|16.0|60.0
4|1|32.0|77.0

종료

.quit

파일을 Xojo 프로그램을 저장할 위치와 같은 위치로 이동합니다.



앱 만들기



Xojo에는 SQLite 사용하는 샘플 앱이 있지만, 그것과는 별도로 이치에서 만들어 보자.

SQLiteTest라는 이름으로 Desktop 앱을 만듭니다.



App을 선택하고 Insert-Property에서 Name을 db로, Type을 SQLitedatabase로 설정합니다.

앱을 다시 선택하고 Insert-Event Handler-Open에서 다음을 작성합니다.

self.db = New SQLiteDatabase
self.db.DatabaseFile = New FolderItem("..\sensordata.sqlite")
Try
  self.db.Connect
Catch error As DatabaseException
  MessageBox("DB open error: " + error.Message)
  Return
End Try

window1로 옮겨 TextField를 2개, OK 버튼을 1개 드래그 드롭 합니다. OK 버튼을 두 번 클릭하여 Action에 다음을 씁니다.

var Record as new DatabaseRow
dim temp as string
temp = tempField.value
dim hemi as string
hemi = hemiField.value
try
  app.db.ExecuteSQL("INSERT INTO sensor ( sensor,temp,hemi ) VALUES (1,"+temp+","+hemi+");")
Catch error as DatabaseException
  MessageBox error.Message
end try

그런 다음 OK 버튼을 두 번 더 두 번 클릭하여 Action에 다음 코드를 씁니다.

var temp,hemi as double
var rs as RowSet
Listbox1.RemoveAllRows
Listbox1.ColumnAlignmentAt(0)=ListBox.Alignments.Center
//Listbox1.ColumnAlignmentAt(1)=ListBox.Alignments.Centor
//Listbox1.ColumnAlignmentAt(2)=ListBox.Alignments.Centor
//Listbox1.ColumnAlignmentAt(3)=ListBox.Alignments.Centor
try
  rs =app.db.SelectSQL("SELECT id,sensor,temp,hemi FROM sensor")
Catch e as DatabaseException
  messagebox e.Message
end try
try
  for each row as databaserow in rs
    temp = val(row.column("temp").stringvalue)
    hemi = val(row.column("hemi").stringvalue)
    Listbox1.AddRow( row.column("id").StringValue,row.column("sensor"),format(temp,"##.#"),format(hemi,"##.#") )
  next
Catch e as DatabaseException
  messagebox e.Message
end try


마지막으로 ListBox를 WIndow에 놓고 열 수를 4로 만듭니다.

라벨을 붙이거나 OK를 다시 작성하여 체재를 정돈합니다.



실행한 곳.



덤 Xojo 데이터베이스 조작 도구의 결함



화면 상단의 버튼을 눌러 테이블을 1개, 열을 5개 작성한다.



Behavior에서 테이블 이름, 필드 이름 및 필드 유형 조정

끝나면 화면 상단의 체크 마크를 눌러 저장.



저장 후, 필드 타입이 Unknown이 되는 것이 있다. 수수께끼.

→ 서포트에 문의하면 버그라고 합니다.

The first thing about this is that there are some bugs in the Xojo UI for database editing so I would not trust what it says. Do you happen to have another SQLite editor that lets you view the database?

형식을 SQLite 용으로 지정하면 잘 작동합니까?



SQLite는 스토리지 클래스라는 개념으로 형식을 사용하는 것 같습니다.

스토리지 클래스에는 이하가 있어, float 나 Timestamp 는 없다고 합니다.
  • NULL
  • INTEGER
  • REAL
  • TEXT
  • BLOB

  • 형식 지정이 잘못되었기 때문입니까? 라고 생각했습니다만 이것 이외에도 수수께끼의 에러가 있거나, Enter Custom SQL Command를 사용하거나 했습니다만 커멘드의 출력을 취할 수 없다고 하는 것으로, 이 툴을 사용하는 것은 단념했습니다.

    좋은 웹페이지 즐겨찾기