Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 我可以在另一个SQLite数据库中存储SQLite数据库吗?_Database_Sqlite_Realbasic - Fatal编程技术网

Database 我可以在另一个SQLite数据库中存储SQLite数据库吗?

Database 我可以在另一个SQLite数据库中存储SQLite数据库吗?,database,sqlite,realbasic,Database,Sqlite,Realbasic,我实际上使用的是旧版本的Realbasic(2008),并且一直在使用VB脚本将几个小数据库备份为Zip文件 我现在发现thnis方法在windows8上不起作用,也不跨平台 由于我希望备份在单个文件中,因此可以进行增量备份,因此我建议使用大型数据库来保存较小数据库的副本 这可能吗 我无意为此购买插件。您可以将任何内容作为BLOB存储在SQLite表中 您也可以考虑虚拟卷和二进制流将DB文件写入单个“容器”文件。 您可以在SQLite表中以BLOB的形式存储任何内容 您也可以考虑虚拟卷和二进制流

我实际上使用的是旧版本的Realbasic(2008),并且一直在使用VB脚本将几个小数据库备份为Zip文件

我现在发现thnis方法在windows8上不起作用,也不跨平台

由于我希望备份在单个文件中,因此可以进行增量备份,因此我建议使用大型数据库来保存较小数据库的副本

这可能吗


我无意为此购买插件。

您可以将任何内容作为BLOB存储在SQLite表中

您也可以考虑虚拟卷和二进制流将DB文件写入单个“容器”文件。


您可以在SQLite表中以BLOB的形式存储任何内容

您也可以考虑虚拟卷和二进制流将DB文件写入单个“容器”文件。


类似于保罗的回答。您可以读取要存储到MemoryBlock中的文件的二进制数据,然后将生成的字符串保存到数据库中。我们已经在几个应用程序中实现了这一点。不要期望它会很快,因为所有这些都是在RAM中首先发生,然后写入数据库的


我认为,理想情况下,您希望在保存之前压缩文件/字符串。但是Xojo没有内置gzip,因此您必须使用第三方解决方案进行压缩或通过声明进行操作系统调用。

类似于Pauls answer。您可以读取要存储到MemoryBlock中的文件的二进制数据,然后将生成的字符串保存到数据库中。我们已经在几个应用程序中实现了这一点。不要期望它会很快,因为所有这些都是在RAM中首先发生,然后写入数据库的


我认为,理想情况下,您希望在保存之前压缩文件/字符串。但是Xojo没有内置gzip,因此您必须使用第三方解决方案进行压缩或通过声明进行操作系统调用。

感谢Paul和BKeeney的帮助。BKeeney走得最近,经过一些实验,我成功了

这就是我所做的

      //
      Dim l, p As Integer
      Dim ReadFromFile as BinaryStream
      Dim f as FolderItem

      f= GetFolderItem("Keyhoe.db3")

      If f <> Nil Then
        l = f.Length
        ReadFromFile=f.OpenAsBinaryFile( False)

        mb = New MemoryBlock(l)

        While Not ReadFromFile.EOF
          mb.byte(p) = ReadFromFile.ReadInt8
          p = p + 1
        wend

        ReadFromFile.close
      End If

      Dim dbFile as FolderItem
      Dim db as REALSQLdatabase
      db= New REALSQLdatabase
      Dim mydate as New Date
      Dim rec as DatabaseRecord

      dbFile = GetFolderItem("Backup.db3")
      db.DatabaseFile = dbFile
      If db.Connect Then
        rec = New DatabaseRecord

        rec.Column("Name") = "Keyhoe"
        rec.BlobColumn("Content") = mb.LeftB(l)
        db.InsertRecord("Databases",rec)
        db.Commit
      else
        MsgBox "Error: "+db.ErrorMessage
      End if

      msgbox "Done..."
//
Dim l,p作为整数
Dim ReadFromFile作为二进制流
Dim f as FolderItem
f=GetFolderItem(“Keyhoe.db3”)
如果f为零,那么
l=f.长度
ReadFromFile=f.OpenAsBinaryFile(False)
mb=新内存块(l)
而不是ReadFromFile.EOF
mb.byte(p)=ReadFromFile.ReadInt8
p=p+1
温德
ReadFromFile.close
如果结束
Dim dbFile作为FolderItem
Dim数据库作为REALSQLdatabase
db=新的REALSQLdatabase
将mydate设置为新日期
Dim rec as数据库记录
dbFile=GetFolderItem(“Backup.db3”)
db.DatabaseFile=dbFile
如果是db.Connect,那么
rec=新数据库记录
记录栏(“名称”)=“Keyhoe”
rec.BlobColumn(“内容”)=mb.LeftB(l)
db.InsertRecord(“数据库”,rec)
db.Commit
其他的
MsgBox“错误:+db.ErrorMessage
如果结束
msgbox“完成…”
再次感谢。。。我现在要做的就是找出如何恢复数据库,但这项任务有几个例子

干杯


艾伦…

感谢保罗和比基尼的帮助。BKeeney走得最近,经过一些实验,我成功了

这就是我所做的

      //
      Dim l, p As Integer
      Dim ReadFromFile as BinaryStream
      Dim f as FolderItem

      f= GetFolderItem("Keyhoe.db3")

      If f <> Nil Then
        l = f.Length
        ReadFromFile=f.OpenAsBinaryFile( False)

        mb = New MemoryBlock(l)

        While Not ReadFromFile.EOF
          mb.byte(p) = ReadFromFile.ReadInt8
          p = p + 1
        wend

        ReadFromFile.close
      End If

      Dim dbFile as FolderItem
      Dim db as REALSQLdatabase
      db= New REALSQLdatabase
      Dim mydate as New Date
      Dim rec as DatabaseRecord

      dbFile = GetFolderItem("Backup.db3")
      db.DatabaseFile = dbFile
      If db.Connect Then
        rec = New DatabaseRecord

        rec.Column("Name") = "Keyhoe"
        rec.BlobColumn("Content") = mb.LeftB(l)
        db.InsertRecord("Databases",rec)
        db.Commit
      else
        MsgBox "Error: "+db.ErrorMessage
      End if

      msgbox "Done..."
//
Dim l,p作为整数
Dim ReadFromFile作为二进制流
Dim f as FolderItem
f=GetFolderItem(“Keyhoe.db3”)
如果f为零,那么
l=f.长度
ReadFromFile=f.OpenAsBinaryFile(False)
mb=新内存块(l)
而不是ReadFromFile.EOF
mb.byte(p)=ReadFromFile.ReadInt8
p=p+1
温德
ReadFromFile.close
如果结束
Dim dbFile作为FolderItem
Dim数据库作为REALSQLdatabase
db=新的REALSQLdatabase
将mydate设置为新日期
Dim rec as数据库记录
dbFile=GetFolderItem(“Backup.db3”)
db.DatabaseFile=dbFile
如果是db.Connect,那么
rec=新数据库记录
记录栏(“名称”)=“Keyhoe”
rec.BlobColumn(“内容”)=mb.LeftB(l)
db.InsertRecord(“数据库”,rec)
db.Commit
其他的
MsgBox“错误:+db.ErrorMessage
如果结束
msgbox“完成…”
再次感谢。。。我现在要做的就是找出如何恢复数据库,但这项任务有几个例子

干杯


Alan…

将zip文件放入BLOB是可能的。将zip文件放入BLOB是可能的。VirtualVolume唯一的问题是速度非常慢。嗨,Paul,谢谢你的主意。我以前从未使用过虚拟卷,但它听起来像是一个方便的“工具”。我想我可以看看BKeeneys的建议,事实上,这是我昨天的想法。我必须想出内存块的想法,因为我也没有这方面的经验。Alan…VirtualVolume唯一的问题是速度非常慢。嗨,Paul,谢谢你的建议。我以前从未使用过虚拟卷,但它听起来像是一个方便的“工具”。我想我可以看看BKeeneys的建议,事实上,这是我昨天的想法。我必须想出内存块的想法,因为我也没有这方面的经验。艾伦……你好,我好像记得你的名字叫鲍勃——如果我错了,请纠正我。由于您以前使用过这种方法,您能否给我一些关于这个过程的指针,因为我不熟悉内存块。这仅仅是一个使用二进制流读取数据库的情况吗?当然欢迎大家帮忙。Alan…Alan,MemoryBlock实际上与字符串相同,只是它没有编码,并且您可以通过其他方式访问它的内容。如果您只想存储一组数据,可以使用String或MemoryBlock。根据经验法则,在处理文本时使用字符串,在处理二进制数据时使用MemoryBlock