Xojo + SQLite로 플레이
하지만 참가자의 수중의 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 는 없다고 합니다.
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 는 없다고 합니다.
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
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
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
화면 상단의 버튼을 눌러 테이블을 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 는 없다고 합니다.
형식 지정이 잘못되었기 때문입니까? 라고 생각했습니다만 이것 이외에도 수수께끼의 에러가 있거나, Enter Custom SQL Command를 사용하거나 했습니다만 커멘드의 출력을 취할 수 없다고 하는 것으로, 이 툴을 사용하는 것은 단념했습니다.
Reference
이 문제에 관하여(Xojo + SQLite로 플레이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nanbuwks/items/507ed3a21e04512d31ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)