PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » ATTACH DATABASE sqlite


ATTACH DATABASE sqlite

Сообщений 1 страница 2 из 2

1

Ребят, не могу понять в чем дело, ругается:   no such table f.schet

Код:
UseSQLiteDatabase()

OpenDatabase(#memDB, ":memory:", "", "")

base$ = "C:\Users\user\Desktop\old.sqlite"

      sql$ = "CREATE TABLE IF NOT EXISTS SCHET ("
      sql$ + "SCHET INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
      sql$ + "FILENAME TEXT, "
      sql$ + "NSCHET TEXT, "
      sql$ + "DSCHET TEXT"
      sql$ + ");"
      If Not DatabaseUpdate(#memDB, sql$)
        MessageRequester("Ошибка!", sql$ + DatabaseError(), #PB_MessageRequester_Error)
      EndIf


sql$ = "ATTACH DATABASE '"+base$+"' AS f;"
      If DatabaseQuery(#memDB, sql$)
        FinishDatabaseQuery(#memDB)
      Else
        MessageRequester("Ошибка!", sql$ + DatabaseError(), #PB_MessageRequester_Error)
      EndIf
      
      
      sql$ = "INSERT INTO main.SCHET Select * FROM f.SCHET;"
      If Not DatabaseUpdate(#memDB, sql$)
        MessageRequester("Ошибка!", sql$ + DatabaseError(), #PB_MessageRequester_Error)
      EndIf
      
      sql$ = "SELECT * FROM SCHET;"
      If DatabaseQuery(#memDB, sql$)
        While NextDatabaseRow(#memDB)
          t$ = GetDatabaseString(#memDB, 0) 
          Debug t$ 
        Wend
        FinishDatabaseQuery(#memDB)
      EndIf

Отвечаю на свой вопрос: когда аттачим базу нужно использовать DatabaseUpdate   )

Отредактировано amer (21.10.2023 09:54:22)

0

2

Этот код как и ожидалось

Код:
EnableExplicit
Define DBF.s = "E:\test.db" ; Заменить на свой или убедиться, что с присоединяемой базой всё в порядке.
UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(DB, Q.s)
	Protected Rc
	Rc = DatabaseUpdate(DB, Q)
	If Rc = 0
    Debug DatabaseError()
	EndIf
	ProcedureReturn Rc
EndProcedure

CreateFile(0, DBF) : CloseFile(0) : OpenDatabase(0, DBF, "", "")
CheckDatabaseUpdate(0, "CREATE TABLE t1 (p1 INT)")
CheckDatabaseUpdate(0, "INSERT INTO t1 (p1) VALUES (10)")
CheckDatabaseUpdate(0, "INSERT INTO t1 (p1) VALUES (20)")
CheckDatabaseUpdate(0, "INSERT INTO t1 (p1) VALUES (30)")
DatabaseQuery(0, "SELECT * FROM t1")
While NextDatabaseRow(0)
	Debug GetDatabaseLong(0, 0)
Wend
FinishDatabaseQuery(0)
CloseDatabase(0)

OpenDatabase(1, ":memory:", "", "")
CheckDatabaseUpdate(1, "CREATE TABLE t2 (p1 INT)")
CheckDatabaseUpdate(1, "ATTACH DATABASE 'E:\test.db' AS d2")
DatabaseQuery(1, "SELECT * FROM t1")
While NextDatabaseRow(1)
	Debug GetDatabaseLong(1, 0)
Wend
FinishDatabaseQuery(1)
CheckDatabaseUpdate(1, "INSERT INTO t2 Select * FROM t1")
DatabaseQuery(1, "SELECT * FROM t2")
While NextDatabaseRow(1)
	Debug GetDatabaseLong(1, 0)
Wend
FinishDatabaseQuery(1)
CheckDatabaseUpdate(1, "DETACH DATABASE d2")
CloseDatabase(1)

выдаёт
10
20
30
10
20
30
10
20
30

p.s. И кстати спасибо за вопрос :cool:
Лет десять как не слежу за развитием СУБД, тряхнул стариной.

p.p.s. Мой sQL опыт берёт начало с QueL
https://ru.wikipedia.org/wiki/Ingres
https://computer-museum.ru/histsoft/rubin.htm

Отредактировано useful (22.10.2023 08:18:24)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » ATTACH DATABASE sqlite