Вверх ↑
Этот топик читают: Гость
Ответов: 108
Рейтинг: 1
#1: 2022-01-08 20:49:36 ЛС | профиль | цитата
подскажите как синхронизировать таблицы в базе данных , если произошли изменения. для проверки изменений через запрос select name from sqlite_sequence, проверяю значение, ну и сравниваю с тем что в локальной базе. (клиент-сервер) структура такая:


сервер

Add(MainForm,13684330,42,133)
{
Width=227
Height=361
Caption="Server"
Position=1
Point(Handle)
link(onCreate,13315943:doEvent1,[])
}
Add(StrList,3850388,154,56)
{
Strings=#6:%3;Dir|20:%3\Database;Database|16:%3\Backup;Backup|16:%3\Export;Export|14:%3\Files;Files|14:%3\Photo;Photo|
}
Add(ArrayEnum,3119902,168,154)
{
link(onItem,14256997:doEvent1,[])
link(onEndEnum,16287537:doRead,[(212,167)(212,209)])
link(Array,3850388:Array,[])
}
Add(WinTools,8787454,42,182)
{
Point(FileName)
link(Handle,13684330:Handle,[])
}
Add(FilePartElm,14171186,49,238)
{
Mode=2
Point(Part)
link(FileName,8787454:FileName,[])
}
Add(VisualStrings,8858774,329,49)
{
Lines=#7:AOBaseS|
Width=81
}
Add(Dir,15623550,294,77)
{
Point(MyDocumentDir)
}
Add(FormatStr,12412966,315,154)
{
DataCount=4
Mask="%2%1"
Point(FString)
link(onFString,11409597:doString,[])
link(Str2,15623550:MyDocumentDir,[])
link(Str3,12011462:Var2,[])
}
Add(MultiStrData,1498816,266,154)
{
Count=1
link(onPart1,12412966:doString,[])
}
Add(DirTools,404003,315,217)
{
Point(doExists)
link(onOK,11795907:doEvent,[])
link(Source,12106931:Var2,[])
}
Add(Hub,14256997,217,154)
{
OutCount=3
link(onEvent1,1498816:doSplit,[])
link(onEvent2,404003:doExists,[(257,167)(257,244)])
}
Add(IndexToChanel,11795907,364,217)
{
Point(Data)
link(onEvent1,1756106:doEvent1,[])
link(onEvent2,2345853:doEvent1,[(410,230)(410,251)])
link(Data,12106931:Var3,[(370,201)])
}
Add(GetDataEx,12106931,315,196)
{
link(Data,12412966:FString,[])
}
Add(Hub,13315943,91,147)
{
OutCount=3
link(onEvent1,14171186:doPart,[(115,153)(115,109)(29,109)(29,244)])
link(onEvent2,2202511:doEvent1,[])
link(onEvent3,8787454:doPopup,[(117,167)(117,181)(30,181)(30,195)])
}
Add(Registry,3352905,469,245)
{
HKey=1
Value="DataBase"
link(Key,11409597:FString,[])
link(Value,1498816:RemaindStr,[(489,196)(272,196)])
}
Add(FormatStr,11409597,476,154)
{
Mask="Software\%1"
Point(FString)
link(onFString,2004410:doString,[])
link(Str1,13487612:Var2,[])
}
Add(GetDataEx,12011462,329,133)
{
link(Data,8858774:Text,[])
}
Add(Hub,1756106,420,217)
{
link(onEvent1,15623550:doDir,[(452,223)(452,125)(282,125)(282,83)])
link(onEvent2,3352905:doWrite,[(452,230)(452,258)])
}
Add(StrList,1747880,651,266)
{
@Hint=#6:Tables|
Strings=#19:CREATE TABLE file (|37:id INTEGER PRIMARY KEY AUTOINCREMENT,|17: Pp INTEGER NULL,|18: Num INTEGER NULL,|19: Date INTEGER NULL,|16: Place TEXT NULL|2:);|0:|44:INSERT INTO file (Pp,Num,Date,Place) VALUES |23:('1','123','0','home'),|24:('2','14','0','floor1'),|24:('3','18','0','floor2'),|24:('3','17','0','floor3'),|25:('4','189','0','floor4');|
AddHint(46,31,47,13,@Hint)
}
Add(SQLite_DB,2395416,588,322)
{
link(onOpen,3437807:doValue,[])
link(onError,10250201:doWork1,[(704,335)])
link(FileName,8095008:Var2,[])
}
Add(SQLite_Exec,42108,644,371)
{
link(onError,10250201:doWork2,[])
link(dbHandle,3437807:Var,[])
link(SQL,1747880:Text,[])
}
Add(GlobalVar,3437807,644,322)
{
Name="dbHandle"
}
Add(Hub,2345853,420,245)
{
link(onEvent1,3352905:doRead,[])
}
Add(FileTools,1803005,315,315)
{
link(onEnd,14314184:doEvent,[])
link(FileName,11068469:Var1,[(321,292)])
}
Add(Registry,16287537,532,203)
{
HKey=1
Value="DataBase"
link(onRead,1500460:doString,[])
link(Key,2004410:FString,[])
}
Add(FormatStr,2004410,539,154)
{
Mask="Software\%1"
Point(FString)
link(Str1,13487612:Var3,[(545,138)])
}
Add(GetDataEx,13487612,476,133)
{
Angle=3
link(Data,12011462:Var3,[])
}
Add(FormatStr,1500460,588,203)
{
Mask="%1\%2"
Point(FString)
link(Str2,15496986:Text,[])
}
Add(VisualStrings,15496986,595,154)
{
Lines=#12:Database.wdb|
Width=81
}
Add(Hub,2202511,119,154)
{
link(onEvent1,3119902:doEnum,[])
link(onEvent2,1803005:doFileExists,[(154,167)(154,342)])
}
Add(GetDataEx,8095008,588,287)
{
link(Data,1500460:FString,[])
}
Add(IndexToChanel,14314184,371,315)
{
Point(Data)
link(onEvent1,1819913:doEvent1,[(419,321)(419,370)])
link(onEvent2,12647309:doWork2,[])
link(Data,11068469:Var2,[])
}
Add(GetDataEx,11068469,371,287)
{
Angle=1
link(Data,8095008:Var1,[])
}
Add(Hub,1819913,434,364)
{
link(onEvent1,12647309:doWork1,[(480,370)])
link(onEvent2,42108:doExec,[])
}
Add(HubEx,12647309,476,322)
{
link(onEvent,2395416:doOpen,[])
}
Add(TCP_Server,6277412,98,448)
{
Port=5216
Point(onError)
Point(onServerConnect)
Point(onServerDisconnect)
link(onRead,16104491:doSplit,[])
link(onServerConnect,145292:doOn,[])
link(onServerDisconnect,145292:doOff,[(156,489)(156,475)])
}
Add(Edit,10835985,98,378)
{
Left=10
Top=15
Width=180
Text="127.0.0.1"
}
Add(Button,10025849,35,448)
{
Left=10
Top=55
Caption="Start"
link(onClick,6277412:doOpen,[])
}
Add(Button,12539975,35,497)
{
Left=75
Top=55
Caption="Stop"
link(onClick,6277412:doClose,[(83,503)(83,461)])
}
Add(Memo,1088624,595,567)
{
Left=10
Top=85
Width=180
Height=175
}
Add(LED,145292,182,462)
{
Left=135
Top=55
Width=55
Height=20
Shape=1
ColorOn=32768
ColorOff=8421504
}
Add(FormatStr,6720054,371,567)
{
Mask="select name||';'||seq from sqlite_sequence;"
link(onFString,9759520:doQuery,[])
}
Add(SQLite_Query,9759520,441,567)
{
link(onQuery,8628912:doStr,[])
link(onError,9995508:doWork3,[(557,587)])
link(dbHandle,5113974:Var,[])
}
Add(GlobalVar,5113974,441,532)
{
Name="dbHandle"
}
Add(Button,6735610,308,567)
{
Left=135
Top=270
Caption="test"
link(onClick,6720054:doString,[])
}
Add(MT_String,8628912,511,567)
{
link(onResult,9995508:doWork2,[])
}
Add(HubEx,9995508,553,567)
{
link(onEvent,1088624:doAdd,[])
}
Add(MultiStrData,16104491,224,448)
{
Char="#"
link(onPart2,9106633:doSplit,[])
}
Add(MultiStrData,9106633,280,455)
{
Char="*"
Point(doFrom)
link(onPart2,1968163:doQuery,[])
}
Add(SQLite_Query,1968163,448,462)
{
link(onQuery,1614658:doStr,[])
link(dbHandle,7164471:Var,[])
}
Add(GlobalVar,7164471,448,427)
{
Name="dbHandle"
}
Add(MT_String,1614658,511,462)
{
link(onResult,16261547:doString,[])
}
Add(FormatStr,16261547,588,462)
{
Mask="#1*%1"
link(onFString,14088126:doWork3,[(653,468)])
}
Add(HubEx,14088126,649,434)
{
Angle=3
link(onEvent,6277412:doSend,[(653,421)(88,421)(88,468)])
}
Add(MultiStrData,13807986,343,476)
{
Char="*"
Point(doFrom)
}
Add(StatusBar,931965,749,371)
{
}
Add(HubEx,10250201,700,371)
{
link(onEvent,931965:doText,[])
}




клиент

Add(MainForm,13684330,42,133)
{
Width=223
Height=361
Caption="Client"
Position=1
Point(Handle)
link(onCreate,13315943:doEvent1,[])
}
Add(StrList,3850388,154,56)
{
Strings=#6:%3;Dir|20:%3\Database;Database|16:%3\Backup;Backup|16:%3\Export;Export|14:%3\Files;Files|14:%3\Photo;Photo|
}
Add(ArrayEnum,3119902,168,154)
{
link(onItem,14256997:doEvent1,[])
link(onEndEnum,16287537:doRead,[(212,167)(212,209)])
link(Array,3850388:Array,[])
}
Add(WinTools,8787454,42,182)
{
Point(FileName)
link(Handle,13684330:Handle,[])
}
Add(FilePartElm,14171186,49,238)
{
Mode=2
Point(Part)
link(FileName,8787454:FileName,[])
}
Add(VisualStrings,8858774,329,49)
{
Lines=#7:AOBaseC|
Width=81
}
Add(Dir,15623550,294,77)
{
Point(MyDocumentDir)
}
Add(FormatStr,12412966,315,154)
{
DataCount=4
Mask="%2%1"
Point(FString)
link(onFString,11409597:doString,[])
link(Str2,15623550:MyDocumentDir,[])
link(Str3,12011462:Var2,[])
}
Add(MultiStrData,1498816,266,154)
{
Count=1
link(onPart1,12412966:doString,[])
}
Add(DirTools,404003,315,217)
{
Point(doExists)
link(onOK,11795907:doEvent,[])
link(Source,12106931:Var2,[])
}
Add(Hub,14256997,217,154)
{
OutCount=3
link(onEvent1,1498816:doSplit,[])
link(onEvent2,404003:doExists,[(257,167)(257,244)])
}
Add(IndexToChanel,11795907,364,217)
{
Point(Data)
link(onEvent1,1756106:doEvent1,[])
link(onEvent2,2345853:doEvent1,[(410,230)(410,251)])
link(Data,12106931:Var3,[(370,201)])
}
Add(GetDataEx,12106931,315,196)
{
link(Data,12412966:FString,[])
}
Add(Hub,13315943,91,147)
{
OutCount=3
link(onEvent1,14171186:doPart,[(115,153)(115,109)(29,109)(29,244)])
link(onEvent2,2202511:doEvent1,[])
link(onEvent3,8787454:doPopup,[(117,167)(117,181)(30,181)(30,195)])
}
Add(Registry,3352905,469,245)
{
HKey=1
Value="DataBase"
link(Key,11409597:FString,[])
link(Value,1498816:RemaindStr,[(489,196)(272,196)])
}
Add(FormatStr,11409597,476,154)
{
Mask="Software\%1"
Point(FString)
link(onFString,2004410:doString,[])
link(Str1,13487612:Var2,[])
}
Add(GetDataEx,12011462,329,133)
{
link(Data,8858774:Text,[])
}
Add(Hub,1756106,420,217)
{
link(onEvent1,15623550:doDir,[(452,223)(452,125)(282,125)(282,83)])
link(onEvent2,3352905:doWrite,[(452,230)(452,258)])
}
Add(StrList,1747880,651,266)
{
@Hint=#6:Tables|
Strings=#19:CREATE TABLE file (|37:id INTEGER PRIMARY KEY AUTOINCREMENT,|17: Pp INTEGER NULL,|18: Num INTEGER NULL,|19: Date INTEGER NULL,|16: Place TEXT NULL|2:);|0:|
AddHint(46,31,47,13,@Hint)
}
Add(SQLite_DB,2395416,588,322)
{
link(onOpen,3437807:doValue,[])
link(FileName,8095008:Var2,[])
}
Add(SQLite_Exec,42108,644,371)
{
link(dbHandle,3437807:Var,[])
link(SQL,1747880:Text,[])
}
Add(GlobalVar,3437807,644,322)
{
Name="dbHandle"
}
Add(Hub,2345853,420,245)
{
link(onEvent1,3352905:doRead,[])
}
Add(FileTools,1803005,315,315)
{
link(onEnd,14314184:doEvent,[])
link(FileName,11068469:Var1,[(321,292)])
}
Add(Registry,16287537,532,203)
{
HKey=1
Value="DataBase"
link(onRead,1500460:doString,[])
link(Key,2004410:FString,[])
}
Add(FormatStr,2004410,539,154)
{
Mask="Software\%1"
Point(FString)
link(Str1,13487612:Var3,[(545,138)])
}
Add(GetDataEx,13487612,476,133)
{
Angle=3
link(Data,12011462:Var3,[])
}
Add(FormatStr,1500460,588,203)
{
Mask="%1\%2"
Point(FString)
link(Str2,15496986:Text,[])
}
Add(VisualStrings,15496986,595,154)
{
Lines=#12:Database.wdb|
Width=81
}
Add(Hub,2202511,119,154)
{
link(onEvent1,3119902:doEnum,[])
link(onEvent2,1803005:doFileExists,[(154,167)(154,342)])
}
Add(GetDataEx,8095008,588,287)
{
link(Data,1500460:FString,[])
}
Add(IndexToChanel,14314184,371,315)
{
Point(Data)
link(onEvent1,1819913:doEvent1,[(419,321)(419,370)])
link(onEvent2,12647309:doWork2,[])
link(Data,11068469:Var2,[])
}
Add(GetDataEx,11068469,371,287)
{
Angle=1
link(Data,8095008:Var1,[])
}
Add(Hub,1819913,434,364)
{
link(onEvent1,12647309:doWork1,[(480,370)])
link(onEvent2,42108:doExec,[])
}
Add(HubEx,12647309,476,322)
{
link(onEvent,2395416:doOpen,[])
}
Add(TCP_Client,5677501,91,413)
{
Port=5216
Point(onError)
link(onRead,5248229:doEvent1,[])
link(onConnect,145292:doOn,[])
link(onDisconnect,145292:doOff,[(152,433)(152,419)])
link(IP,128770:Text,[])
}
Add(Edit,128770,91,343)
{
Left=10
Top=15
Width=185
Text="192.168.0.102"
}
Add(Button,11982060,21,413)
{
Left=15
Top=55
Caption="Start"
link(onClick,5677501:doOpen,[])
}
Add(Memo,182913,511,476)
{
Left=10
Top=90
Width=180
Height=160
ScrollBars=3
}
Add(Button,15573677,21,455)
{
Left=75
Top=55
Caption="Stop"
link(onClick,5677501:doClose,[(69,461)(69,426)])
}
Add(LED,145292,189,406)
{
Left=135
Top=55
Width=55
Height=20
Shape=1
ColorOn=32768
ColorOff=8421504
Point(doColorOff)
}
Add(Button,11509449,21,581)
{
Left=135
Top=260
Caption="test"
link(onClick,6271081:doEvent1,[])
}
Add(FormatStr,4808841,98,546)
{
Mask="#1*select name ||';'|| seq from sqlite_sequence;"
link(onFString,14521910:doEvent1,[])
}
Add(MultiStrData,9106633,420,469)
{
Char="*"
link(onPart2,182913:doAdd,[])
}
Add(Str_Enum,3465191,273,413)
{
Delimiter="#"
link(onEnum,10385416:doEvent1,[])
}
Add(If_else,5882648,364,462)
{
Op2=String()
link(onFalse,9106633:doSplit,[])
link(Op1,5168629:Value,[])
}
Add(Memory,5168629,364,413)
{
}
Add(Hub,10385416,329,413)
{
InCount=2
link(onEvent1,5168629:doValue,[])
link(onEvent2,5882648:doCompare,[(353,426)(353,468)])
}
Add(Hub,14521910,140,546)
{
InCount=2
link(onEvent2,5677501:doSend,[(166,559)(166,486)(79,486)(79,433)])
}
Add(Hub,6271081,63,581)
{
link(onEvent2,4808841:doString,[(87,594)(87,552)])
}
Add(SQLite_Query,7164329,364,609)
{
link(onQuery,5287022:doStr,[])
link(dbHandle,14993342:Var,[])
}
Add(GlobalVar,14993342,364,574)
{
Name="dbHandle"
}
Add(MT_String,5287022,434,609)
{
}
Add(MultiStrPart,7873326,525,609)
{
}
Add(FormatStr,12632466,525,658)
{
Mask="select name||';'||seq||';'||'%2' from sqlite_sequence;"
link(Str1,7873326:Part1,[])
link(Str2,7873326:Part2,[])
}
Add(Hub,6351035,490,609)
{
OutCount=3
link(onEvent1,7873326:doSplit,[])
link(onEvent2,12632466:doString,[(514,622)(514,664)])
}
Add(FormatStr,1455528,98,602)
{
Mask="#1*select name from sqlite_sequence;"
link(onFString,14521910:doEvent2,[(135,608)(135,559)])
}
Add(Hub,5248229,231,413)
{
link(onEvent1,3465191:doEnum,[])
}






но пока не пойму как передать / получить данные из базы данных, запрос это строка - #1*select name ||';'|| seq from sqlite_sequence; где #1* разделитель, если вдруг будут разные запросы.
вообще думал так: при "синхронизации" отключать сервер , копировать файл базы данных напрямую, затем включать, передавать ну там по ftp или http , ip адрес ведь есть , выключать клиент , менять базу и включать заного

Редактировалось 5 раз(а), последний 2022-01-08 20:53:18
карма: 0
well done turner
0
vip
#1.1контекстная реклама от партнеров
Ответов: 407
Рейтинг: 65
#2: 2022-01-10 06:37:02 ЛС | профиль | цитата
Если я правильно понял то, что тебе нужно. Синхронизировать базы sqlite можно несколькими способами:
1. Простым копированием файла базы данных
2. Использовать команды . backup и .restore (https://www.sqlite.org/cli.html)
3. Использовать команду .dump (.read)
4. Сравнить базы утилитой sqldiff с параметром –transaction (.read) (https://www.sqlite.org/sqldiff.html)
5. Использовать SQLite Online Backup API (https://sqlite.org/backup.html)
6. VACUUM INTO (https://www.sqlite.org/lang_vacuum.html#vacuuminto)
Если компьютеры находятся в одной подсети, то правильней будет расшарить базу данных.
Везде есть свои плюсы и минусы.
Ссылка на пример (вариант 3) - https://forum.hiasm.com/getfile/39346

Редактировалось 1 раз(а), последний 2022-01-10 06:58:28
карма: 9

0
файлы: 1SQLite Over a Network.zip [1022KB] [85]
2
Сообщение
...
Прикрепленные файлы
(файлы не залиты)