VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 11245|回复: 11

[原创] 更新了下Sqlite3库,增加了使用事例。

[复制链接]
发表于 2014-2-26 14:15:29 | 显示全部楼层 |阅读模式
不少朋友需要使用事例,其实如果熟悉标准sqlite的语句根本没必要事例的,
事例写的比较乱,凑活着看吧,基本功能都涵盖到了。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

详细看了,很完善。可就是使用起来不习惯……看来还得重新封装自定义一下,符合自己习惯的调用才容易上手。因为懒得记别人的习惯,呵呵。  发表于 2014-2-27 12:08

评分

参与人数 2威望 +7 人气 +4 收起 理由
快手 + 6 + 1 赞一个! 就想看看不同点
gogoo + 1 + 3 事例

查看全部评分

本帖被以下淘专辑推荐:

发表于 2014-2-27 15:40:36 | 显示全部楼层
请教最初始的问题:空的数据库如何创建?即范例中的  DB.sqlite 文件是如何创建出来的?

点评

sqlite3_open 如果不存在就会创建一个。  发表于 2014-2-28 05:12
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-27 17:22:27 | 显示全部楼层
qzxym 发表于 2014-2-27 15:40
请教最初始的问题:空的数据库如何创建?即范例中的  DB.sqlite 文件是如何创建出来的?

你可以使用一般的sqlite3管理工具建库,也先创建个空文件然后使用sql语句建库,详细的sql命令建议还是去看下sqlite3的教程,这里讲也讲不清
回复 支持 反对

使用道具 举报

发表于 2014-2-27 18:30:32 | 显示全部楼层
这个可以有,还真没用过这个数据库。
回复 支持 反对

使用道具 举报

发表于 2014-3-10 18:54:57 | 显示全部楼层
本帖最后由 快手 于 2014-3-10 18:56 编辑

给你搞了下函数命名,好理解点,哈~~~

为了方便记忆使用,又简单化了几个函数如下:
  1. Option Explicit

  2. Public Li As New clsSQLite
  3. Public m_DB As Long

  4. Public SqlStr As String

  5. Public Sub DBOpen(DBPathFile$)
  6.     Li.DBOpen DBPathFile
  7. End Sub

  8. Public Sub DBClose()
  9.     Li.DBClose
  10. End Sub

  11. Public Sub RunSQL(SqlStr$)
  12.     On Error Resume Next
  13.     Li.Execute m_DB, SqlStr
  14. End Sub

  15. Public Function GetRs$(SqlStr$)
  16.     Dim sqlite3_stmt  As Long
  17.     Dim hRet As Long
  18.     'Log.Cls
  19.     Dim RsString As String
  20.     Dim RsCount As Long
  21.     Dim i As Integer
  22.     hRet = Li.Prepare(m_DB, SqlStr, sqlite3_stmt)
  23.     If hRet = SQLITE_OK Then
  24.         Do While Li.Movenext(sqlite3_stmt)
  25.             RsCount = Li.ColumnCount(sqlite3_stmt)
  26.             For i = 0 To RsCount
  27.                 RsString = RsString & Li.ColumnText(sqlite3_stmt, i) & "|-|-|"
  28.             Next i
  29.             RsString = RsString & "|#|#|"
  30.         Loop
  31.     End If
  32.     Li.Finalize sqlite3_stmt
  33.     GetRs = RsString
  34. End Function

  35. Public Function RsValue(ByRef SqlStr$) As Long
  36.     Dim sqlite3_stmt As Long
  37.     Dim hRet As Long
  38.     hRet = Li.Prepare(m_DB, SqlStr, sqlite3_stmt)
  39.     If hRet = SQLITE_OK Then
  40.        RsValue = sqlite3_stmt
  41.     End If
  42. End Function

  43. Public Sub Insert(biao$, ziduan$, Zhi$)
  44.     SqlStr = "insert into " & biao & "(" & ziduan & ")" & " values (" & Zhi & ")"
  45.     Li.Execute m_DB, SqlStr
  46. End Sub

  47. Public Sub Update(biao$, xiugai$, ziduan$, Zhi$)
  48.     SqlStr = "update " & biao & " set " & xiugai & " where " & ziduan & "=" & Zhi
  49.     Li.Execute m_DB, SqlStr
  50. End Sub

  51. Public Function UpdateValues(biao$, Set_ZhiDuan$, Set_Zhi$, FenGeFu$, Where_ziduan$, Where_Zhi$, ByVal Types As Integer)

  52.     Dim ArrStr1() As String
  53.     Dim ArrStr2() As String
  54.     Dim tmp_Gai As String
  55.     Dim i As Integer
  56.     ArrStr1 = Split(Set_ZhiDuan, ",")
  57.     ArrStr2 = Split(Set_Zhi, FenGeFu)
  58.     For i = 0 To UBound(ArrStr1)
  59.       tmp_Gai = tmp_Gai & Trim(ArrStr1(i)) & "=" & ArrStr2(i) & ","
  60.     Next i
  61.     tmp_Gai = Left(tmp_Gai, Len(tmp_Gai) - 1)
  62.     If Types = 1 Then
  63.        SqlStr = "Update " & biao & " Set " & tmp_Gai & " Where " & Where_ziduan & "='" & Where_Zhi & "'"
  64.     Else
  65.        SqlStr = "Update " & biao & " Set " & tmp_Gai & " Where " & Where_ziduan & "=" & Where_Zhi
  66.     End If
  67.     Li.Execute m_DB, SqlStr

  68. End Function

  69. Public Function Delete(biao$, Optional ByVal tiaojian$ = "")
  70.     If tiaojian = "" Then
  71.        SqlStr = "TRUNCATE " & biao
  72.     Else
  73.        If InStr(LCase(tiaojian), "where ") > 0 Then
  74.           SqlStr = "delete " & biao & tiaojian
  75.        Else
  76.           SqlStr = "delete " & biao & " where " & tiaojian
  77.        End If
  78.     End If
  79.     Li.Execute m_DB, SqlStr
  80. End Function


  81. Public Function GetValue$(biao$, gei$, huo$, Types$, str$)
  82.    
  83.     Dim SqlStr As String
  84.     If Types = 0 Then
  85.        SqlStr = "select " & huo & " from " & biao & "  where " & gei & "=" & str
  86.     Else
  87.        SqlStr = "select " & huo & " from " & biao & "  where " & gei & "='" & str & "'"
  88.     End If
  89.    
  90.     Dim sqlite3_stmt  As Long
  91.     Dim hRet As Long
  92.     hRet = Li.Prepare(m_DB, SqlStr, sqlite3_stmt)
  93.     If hRet = SQLITE_OK Then
  94.         If Li.Movenext(sqlite3_stmt) Then
  95.             GetValue = Li.ColumnText(sqlite3_stmt, 0)
  96.         End If
  97.     End If
  98.     Li.Finalize sqlite3_stmt

  99. End Function


  100. Public Function GetCount&(biao$, Optional ByVal Zhiduan$ = "", Optional ByVal tiaojian$ = "")
  101.    
  102.     GetCount = 0
  103.     If tiaojian = "" Then
  104.        SqlStr = "select count(" & Zhiduan & ") from " & biao
  105.     Else
  106.        If InStr(LCase(tiaojian), "where ") > 0 Then
  107.           SqlStr = "select count(" & Zhiduan & ") from " & biao & tiaojian
  108.        Else
  109.           SqlStr = "select count(" & Zhiduan & ") from " & biao & " where " & tiaojian
  110.        End If
  111.     End If
  112.    
  113.     Dim sqlite3_stmt  As Long
  114.     Dim hRet As Long
  115.     hRet = Li.Prepare(m_DB, SqlStr, sqlite3_stmt)
  116.     If hRet = SQLITE_OK Then
  117.         If Li.Movenext(sqlite3_stmt) Then
  118.             GetCount = Li.ColumnInt(sqlite3_stmt, 0)
  119.         End If
  120.     End If
  121.     Li.Finalize sqlite3_stmt
  122.    
  123.     GetCount = GetCount

  124. End Function
复制代码
以下引用兄弟你的原作,名字把:ite_ 扔掉了~~~~~~~~~~~~~
  1. Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
  2. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
  3. 'ite
  4. Private Declare Sub ite__free_table Lib "iteSql" (ByVal ResultPtr As Long)
  5. Private Declare Function ite__get_table Lib "iteSql" (ByVal db As Long, ByVal SQLStatement As String, ByRef ResultPtr As Long, ByRef rRowCount As Long, ByRef rColCount As Long) As Long
  6. Private Declare Function ite__get_data Lib "iteSql" (ByVal ResultPtr As Long, ByVal RowIdx As Long, ByVal ColIdx As Long, ByVal ColCount As Long) As Long

  7. Private Declare Function ite__open Lib "iteSql" (ByVal dbname As String, ByRef db As Long) As Long
  8. Private Declare Function ite__close Lib "iteSql" (ByVal db As Long) As Long
  9. Private Declare Function ite__exec Lib "iteSql" (ByVal db As Long, ByVal SQLStatement As String) As Long
  10. Private Declare Function ite__libversion Lib "iteSql" () As Long 'T
  11. Private Declare Function ite__errmsg Lib "iteSql" (ByVal db As Long) As Long 'T
  12. Private Declare Function ite__errcode Lib "iteSql" (ByVal db As Long) As Long
  13. Private Declare Function ite__last_insert_rowid Lib "iteSql" (ByVal db As Long) As Long
  14. Private Declare Function ite__changes Lib "iteSql" (ByVal db As Long) As Long
  15. Private Declare Function ite__total_changes Lib "iteSql" (ByVal db As Long) As Long
  16. Private Declare Function ite__prepare Lib "iteSql" (ByVal db As Long, ByVal SQLStatement As String, ByRef hStmt As Long) As Long
  17. Private Declare Function ite__finalize Lib "iteSql" (ByVal hStmt As Long) As Long
  18. Private Declare Function ite__reset Lib "iteSql" (ByVal hStmt As Long) As Long
  19. Private Declare Function ite__step Lib "iteSql" (ByVal hStmt As Long) As Long
  20. Private Declare Function ite__data_count Lib "iteSql" (ByVal hStmt As Long) As Long
  21. Private Declare Function ite__column_count Lib "iteSql" (ByVal hStmt As Long) As Long
  22. Private Declare Function ite__column_name Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Long 'T
  23. Private Declare Function ite__column_decltype Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Long 'T
  24. Private Declare Function ite__column_type Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Long
  25. Private Declare Function ite__column_blob Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Long
  26. Private Declare Function ite__column_bytes Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Long
  27. Private Declare Function ite__column_double Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Double
  28. Private Declare Function ite__column_int Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Long
  29. Private Declare Function ite__column_text Lib "iteSql" (ByVal hStmt As Long, ByVal ColNum As Long) As Long 'T
  30. Private Declare Function ite__bind_blob Lib "iteSql" (ByVal hStmt As Long, ByVal ParamNum As Long, ByVal ptrData As Long, ByVal numBytes As Long) As Long
  31. Private Declare Function ite__bind_int Lib "iteSql" (ByVal hStmt As Long, ByVal ParamNum As Long, ByVal nValue As Long) As Long
  32. Private Declare Function ite__bind_double Lib "iteSql" (ByVal hStmt As Long, ByVal ParamNum As Long, ByVal nValue As Double) As Long
  33. Private Declare Function ite__bind_text Lib "iteSql" (ByVal hStmt As Long, ByVal ParamNum As Long, ByVal szValue As String) As Long
  34. Private Const SQLITE_OK = 0
  35. Private Const SQLITE_ERROR = 1
  36. Private Const SQLITE_INTERNAL = 2
  37. Private Const SQLITE_PERM = 3
  38. Private Const SQLITE_ABORT = 4
  39. Private Const SQLITE_BUSY = 5
  40. Private Const SQLITE_LOCKED = 6
  41. Private Const SQLITE_NOMEM = 7
  42. Private Const SQLITE_READONLY = 8 ' Attempt to write a readonly database
  43. Private Const SQLITE_INTERRUPT = 9 ' Operation terminated by sqlite3_interrupt()
  44. Private Const SQLITE_IOERR = 10 ' Some kind of disk I/O error occurred
  45. Private Const SQLITE_CORRUPT = 11 ' The database disk image is malformed
  46. Private Const SQLITE_NOTFOUND = 12 ' (Internal Only) Table or record not found
  47. Private Const SQLITE_FULL = 13 ' Insertion failed because database is full
  48. Private Const SQLITE_CANTOPEN = 14 ' Unable to open the database file
  49. Private Const SQLITE_PROTOCOL = 15 ' Database lock protocol error
  50. Private Const SQLITE_EMPTY = 16 ' Database is empty
  51. Private Const SQLITE_SCHEMA = 17 ' The database schema changed
  52. Private Const SQLITE_TOOBIG = 18 ' Too much data for one row of a table
  53. Private Const SQLITE_CONSTRAINT = 19 ' Abort due to contraint violation
  54. Private Const SQLITE_MISMATCH = 20 ' Data type mismatch
  55. Private Const SQLITE_MISUSE = 21 ' Library used incorrectly
  56. Private Const SQLITE_NOLFS = 22 ' Uses OS features not supported on host
  57. Private Const SQLITE_AUTH = 23 ' Authorization denied
  58. Private Const SQLITE_FORMAT = 24 ' Auxiliary database format error
  59. Private Const SQLITE_RANGE = 25 ' 2nd parameter to sqlite3_bind out of range
  60. Private Const SQLITE_NOTADB = 26 ' File opened that is not a database file
  61. Private Const SQLITE_ROW = 100 ' sqlite3_step() has another row ready
  62. Private Const SQLITE_DONE = 101 ' sqlite3_step() has finished executing
  63. Public Enum SQLITETYPE
  64.     SQLITE_INTEGER = 1
  65.     SQLITE_FLOAT = 2
  66.     SQLITE_TEXT = 3
  67.     SQLITE_BLOB = 4
  68.     SQLITE_NULL = 5
  69. End Enum
  70. Private Const JULIANDAY_OFFSET As Double = 2415018.5

  71. Private Function UTF8StringFromPtr(ByVal pUtf8String As Long) As String
  72.     Dim cSize As Long
  73.     UTF8StringFromPtr = ""
  74.     cSize = MultiByteToWideChar(65001, 0, pUtf8String, -1, 0, 0)
  75.     If cSize > 1 Then
  76.         UTF8StringFromPtr = String(cSize - 1, " ")
  77.         MultiByteToWideChar 65001, 0, pUtf8String, -1, StrPtr(UTF8StringFromPtr), cSize
  78.     End If
  79. End Function

  80. Private Function BytesFromPtr(ByVal lAddr As Long, ByVal lSize As Long) As Byte()
  81.     ReDim bvData(lSize - 1) As Byte
  82.     CopyMemory bvData(0), ByVal lAddr, lSize
  83.     BytesFromPtr = bvData
  84. End Function

  85. Private Function ToJulianDay(oleDate As Date) As Double
  86.     ToJulianDay = CDbl(oleDate) + JULIANDAY_OFFSET
  87. End Function

  88. Private Function FromJulianDay(julianDay As Double) As Date
  89.     FromJulianDay = CDate(julianDay - JULIANDAY_OFFSET)
  90. End Function

  91. Public Function Errmsg(ByVal db As Long) As Long
  92.     Errmsg = UTF8StringFromPtr(ite__errmsg(db))
  93. End Function

  94. Public Function Errcode(ByVal db As Long) As Long
  95.     Errcode = ite__errcode(db)
  96. End Function

  97. Public Function Libversion() As String
  98.     Libversion = UTF8StringFromPtr(ite__libversion)
  99. End Function

  100. Private Function DB_Open(ByVal DBFile As String, ByRef db As Long) As Long
  101.     DB_Open = ite__open((DBFile), db)
  102. End Function

  103. Public Function DBOpen(dbname&)
  104.     '打开数据库
  105.     DB_Open dbname, m_DB
  106. End Function

  107. Private Function DB_Close(ByVal db As Long) As Long
  108.     DB_Close = ite__close(db)
  109. End Function

  110. Public Function DBClose()
  111.     '关闭数据库
  112.     DB_Close m_DB
  113. End Function

  114. Public Function Execute(ByVal db As Long, ByVal zSQL As String) As Long
  115.     Execute = ite__exec(db, zSQL)
  116. End Function

  117. Public Function GetTable(ByVal db As Long, ByVal zSQL As String, ByRef ResultPtr As Long, ByRef rRowCount As Long, ByRef rColCount As Long) As Long
  118.     GetTable = ite__get_table(db, zSQL, ResultPtr, rRowCount, rColCount)
  119. End Function

  120. Public Sub FreeTable(ByVal ResultPtr As Long)
  121.     Call ite__free_table(ResultPtr)
  122. End Sub

  123. Public Function GetData(ByVal ResultPtr As Long, ByVal RowIdx As Long, ByVal ColIdx As Long, ByVal ColCount As Long) As String
  124.     GetData = UTF8StringFromPtr(ite__get_data(ResultPtr, RowIdx, ColIdx, ColCount))
  125. End Function

  126. Public Function Changes(ByVal db As Long) As Long
  127.     Changes = ite__changes(db)
  128. End Function

  129. Public Function TotalChanges(ByVal db As Long) As Long
  130.     TotalChanges = ite__total_changes(db)
  131. End Function

  132. Public Function LastRowID(ByVal db As Long) As Long
  133.     LastRowID = ite__last_insert_rowid(db)
  134. End Function

  135. Public Function Prepare(ByVal db As Long, ByVal zSQL As String, ByRef hStmt As Long) As Long
  136.     Prepare = ite__prepare(db, zSQL, hStmt)
  137. End Function

  138. Public Function Finalize(ByVal hStmt As Long) As Long
  139.     Finalize = ite__finalize(hStmt)
  140. End Function

  141. Public Function Reset(ByVal hStmt As Long) As Long
  142.     Reset = ite__reset(hStmt)
  143. End Function

  144. Public Function Step(ByVal hStmt As Long) As Long
  145.     Step = ite__step(hStmt)
  146. End Function

  147. Public Function Movenext(ByVal hStmt As Long) As Boolean
  148.     Movenext = (ite__step(hStmt) = 100)
  149. End Function

  150. Public Function DataCount(ByVal hStmt As Long) As Long
  151.     DataCount = ite__data_count(hStmt)
  152. End Function

  153. Public Function ColumnName(ByVal hStmt As Long, ByVal ColNum As Long) As String
  154.     ColumnName = UTF8StringFromPtr(ite__column_name(hStmt, ColNum))
  155. End Function

  156. Public Function ColumnDecltype(ByVal hStmt As Long, ByVal ColNum As Long) As String
  157.     ColumnDecltype = UTF8StringFromPtr(ite__column_decltype(hStmt, ColNum))
  158. End Function

  159. Public Function ColumnType(ByVal hStmt As Long, ByVal ColNum As Long) As Long
  160.     ColumnType = ite__column_type(hStmt, ColNum)
  161. End Function

  162. Public Function ColumnCount(ByVal hStmt As Long) As Long
  163.     ColumnCount = ite__column_count(hStmt)
  164. End Function

  165. Public Function ColumnDouble(ByVal hStmt As Long, ByVal ColNum As Long) As Double
  166.     ColumnDouble = ite__column_double(hStmt, ColNum)
  167. End Function

  168. Public Function ColumnInt(ByVal hStmt As Long, ByVal ColNum As Long) As Double
  169.     ColumnInt = ite__column_int(hStmt, ColNum)
  170. End Function

  171. Public Function ColumnText(ByVal hStmt As Long, ByVal ColNum As Long) As String
  172.     ColumnText = UTF8StringFromPtr(ite__column_text(hStmt, ColNum))
  173. End Function

  174. Public Function ColumnBlob(ByVal hStmt As Long, ByVal ColNum As Long) As Byte()
  175.     Dim lAddr As Long, lSize As Long
  176.     lAddr = ite__column_blob(hStmt, ColNum)
  177.     lSize = ite__column_bytes(hStmt, ColNum)
  178.     ColumnBlob = BytesFromPtr(lAddr, lSize)
  179. End Function

  180. Public Function ColumnDate(ByVal hStmt As Long, ByVal ColNum As Long) As Date
  181.     ColumnDate = FromJulianDay(ite__column_double(hStmt, ColNum))
  182. End Function

  183. Public Function BindDate(ByVal hStmt As Long, ByVal ParamNum As Long, ByVal nValue As Date) As Long
  184.     BindDate = ite__bind_double(hStmt, ParamNum, ToJulianDay(nValue))
  185. End Function

  186. Public Function BindBlob(ByVal hStmt As Long, ByVal ParamNum As Long, pData() As Byte) As Long
  187.     BindBlob = ite__bind_blob(hStmt, ParamNum, VarPtr(pData(0)), UBound(pData) + 1)
  188. End Function

  189. Public Function BindInt(ByVal hStmt As Long, ByVal ParamNum As Long, ByVal nValue As Long) As Long
  190.     BindInt = ite__bind_int(hStmt, ParamNum, nValue)
  191. End Function

  192. Public Function BindDouble(ByVal hStmt As Long, ByVal ParamNum As Long, ByVal nValue As Double) As Long
  193.     BindDouble = ite__bind_double(hStmt, ParamNum, nValue)
  194. End Function

  195. Public Function BindText(ByVal hStmt As Long, ByVal ParamNum As Long, ByVal szValue As String) As Long
  196.     BindText = ite__bind_text(hStmt, ParamNum, szValue)
  197. End Function

  198. Public Function UpdateBlob(ByVal db As Long, ByVal zSQL As String, pData() As Byte) As Long
  199.     Dim sqlite3_stmt As Long
  200.     If Prepare(db, zSQL, sqlite3_stmt) = 0 Then
  201.         UpdateBlob = BindBlob(sqlite3_stmt, 1, pData)
  202.         Step sqlite3_stmt
  203.         Finalize sqlite3_stmt
  204.     End If
  205. End Function

  206. Public Function Compact(ByVal db As Long) As Long
  207.     Compact = Execute(db, "VACUUM")
  208. End Function

  209. Public Function RowNumber(ByVal db As Long, ByVal zTable As String, Optional ByVal zFilter As String) As Long
  210.     Dim sqlite3_stmt As Long, zSQL As String
  211.     zSQL = "select count(*) from " & zTable
  212.     If Len(zFilter) > 0 Then zSQL = zSQL & " where " & zFilter
  213.     If Prepare(db, zSQL, sqlite3_stmt) = 0 Then
  214.         Step sqlite3_stmt
  215.         RowNumber = ColumnInt(sqlite3_stmt, 0)
  216.         Finalize sqlite3_stmt
  217.     End If
  218. End Function

复制代码
回复 支持 反对

使用道具 举报

发表于 2014-3-10 19:30:52 | 显示全部楼层
好东东:
近来我也在看这东西,只可惜与ADO相差很远。
看起来有点困难!

楼上的兄弟:为何不上个附件呢?
回复 支持 反对

使用道具 举报

发表于 2014-4-27 14:57:18 | 显示全部楼层
本帖最后由 votasee 于 2014-4-27 23:45 编辑

湿兄总算更新你的stdcall的封装DLL了...另外还加上了实例...不错..

不过楼上快手又是作了些什么劳动...写写清楚吗.
你改写的一些东西.似乎没法成功运行...比如RUNSQL
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-8-31 17:25:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-9-3 21:29:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-9-8 08:22:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-1 04:33

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表