1

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

我现在发现 thnis 方法在 Windows 8 上不起作用,也不是跨平台的。

因为我希望备份在单个文件中以便它可以是增量的,所以我想使用一个大型数据库来保存较小的副本。

这可能吗?

我无意为此购买插件。

4

3 回答 3

2

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

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

于 2013-11-05T14:26:06.947 回答
1

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

您还可以考虑使用 VirtualVolume 和 BinaryStream 将 DB 文件写入单个“容器”文件。

http://docs.xojo.com/index.php/VirtualVolume

于 2013-11-05T12:52:25.123 回答
1

感谢 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..."

再次感谢……我现在要做的就是弄清楚如何恢复数据库,但有几个例子可以完成这项任务。

干杯,

艾伦...

于 2013-11-05T20:08:43.457 回答