OpenStreetMap embarqué dans votre application

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenStreetMap embarqué dans votre application

Message par djes »

Tiens, modifie le OpenStreetMap avec le code ci-après, tu sauras (en regardant dans le débogueur) pourquoi tu ne vois rien :

Code : Tout sélectionner

Procedure OSM_GetImage(Image.l, Zoom.l, XTile.l, YTile.l)
  Protected psProxyURL.s    = gRWCurl_ProxyIP+":"+gRWCurl_ProxyPort
  Protected psProxyAuth.s   = gRWCurl_ProxyAuthLogin+":"+gRWCurl_ProxyAuthPwd
  Protected plMemory.l
  Protected psURL.s = OSM_Layers_Dim(glLayerCur)\sURL+Str(Zoom)+"/"+Str(XTile)+"/"+Str(YTile)+".png"
  Protected gPWRCurl = curl_easy_init()
  Protected plImageSize.l
  Protected plImageMem.l
  Protected psSQLRequest.s
  Protected pbImageOK.b
  Protected plRes.l
  Protected error.l
  ; Test if in cache else download it
  DatabaseQuery(glSQLiteDB, "SELECT * FROM cache WHERE cache_layer="+#_DQ_+Str(glLayerCur)+#_DQ_+" AND cache_zoom="+#_DQ_+Str(Zoom)+#_DQ_+" AND cache_x="+#_DQ_+Str(XTile)+#_DQ_+" AND cache_y="+#_DQ_+Str(YTile)+#_DQ_+"")
  If FirstDatabaseRow(glSQLiteDB)
    Debug "CACHE : "+Str(glLayerCur)+"\"+Str(Zoom)+"\"+Str(XTile)+"\"+Str(Ytile)
    plImageSize = GetDatabaseLong(glSQLiteDB,6)
    If plImageSize
      plImageMem = AllocateMemory(plImageSize)
      GetDatabaseBlob(glSQLiteDB, 5, plImageMem, plImageSize)
      FinishDatabaseQuery(glSQLiteDB)
      If IsImage(Image)
        FreeImage(Image)
      EndIf
      If CatchImage(Image, plImageMem)
        SetGadgetState(#Image_0+Image, ImageID(Image))
        FreeMemory(plImageMem)
      EndIf
      pbImageOK = #True
    EndIf
  Else
    Debug DatabaseError()
  EndIf
  If pbImageOK = #False
    Debug "DOWNLOAD : "+Str(glLayerCur)+"\"+Str(Zoom)+"\"+Str(XTile)+"\"+Str(Ytile)
    RW_LibCurl_InitData()
    If gRWCurl_Proxy = #True
      curl_easy_setopt(gPWRCurl, #CURLOPT_HTTPPROXYTUNNEL, #True)
      curl_easy_setopt(gPWRCurl, #CURLOPT_PROXY, @psProxyURL)
      If psProxyAuth <> ""
        curl_easy_setopt(gPWRCurl, #CURLOPT_PROXYUSERPWD, @psProxyAuth)
      EndIf
    EndIf
    curl_easy_setopt(gPWRCurl, #CURLOPT_URL, @psURL)
    curl_easy_setopt(gPWRCurl, #CURLOPT_WRITEFUNCTION, @RW_LibCurl_WriteDataFunction())
    error = curl_easy_perform(gPWRCurl)
    curl_easy_cleanup(gPWRCurl)
   	plMemory = 0  
    If error <> 0
    	Debug PeekS(curl_easy_strerror(error))
    Else
    	plMemory = RW_LibCurl_GetData()
    EndIf
    If plMemory
      psSQLRequest = "INSERT INTO cache(cache_layer, cache_zoom, cache_x, cache_y, cache_image, cache_imagesize) VALUES ("
      psSQLRequest + Str(glLayerCur)+","
      psSQLRequest + Str(Zoom)+","
      psSQLRequest + Str(XTile)+","
      psSQLRequest + Str(YTile)+","
      psSQLRequest + "?,"
      psSQLRequest + Str(MemorySize(plMemory))+")"
      SetDatabaseBlob(glSQLiteDB, 0, plMemory, MemorySize(plMemory))
      plRes = DatabaseUpdate(glSQLiteDB, psSQLRequest)
      If plRes = 0
        Debug psSQLRequest
        Debug DatabaseError()
      EndIf
      If IsImage(Image)
        FreeImage(Image)
      EndIf
      If CatchImage(Image, plMemory, MemorySize(plMemory))
        SetGadgetState(#Image_0+Image, ImageID(Image))
        FreeMemory(plMemory)
      EndIf
    EndIf
  EndIf
EndProcedure
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

Je vient de refaire un essais sous Mac et voici ce que j'obtient maintenant comme erreur:

Code : Tout sélectionner

Undefined symbols for architecture x86_64:
  "curl_easy_cleanup", referenced from:
      _EndIf22 in purebasic.o
      PStubcurl_easy_cleanup in purebasic.o
  "curl_easy_init", referenced from:
      _Procedure124.ClearLoop in purebasic.o
      PStubcurl_easy_init in purebasic.o
  "curl_easy_perform", referenced from:
      _EndIf22 in purebasic.o
      PStubcurl_easy_perform in purebasic.o
  "curl_easy_setopt", referenced from:
      _EndIf10 in purebasic.o
      _EndIf22 in purebasic.o
      PStubcurl_easy_setopt in purebasic.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
J'utilise PB 64bits mais j'ai aussi essayé avec PB 32bits et j'ai la même erreur.
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

J'ai réussis à avancer un peut et à supprimer les erreur en modifiant le fichier RW_LibCurl.Inc.pb.

J'ai déjà modifié le CompilerCase pour le mettre à MacOS et devant chaque "SymbolName' j'ai rajouté un "_".

Voici le code modifié:

Code : Tout sélectionner

XIncludeFile "RW_LibCurl_Res.pb"

Macro DQuote
  "
EndMacro
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_MacOS
    Macro SymbolName(Val)
      DQuote#Val#DQuote
    EndMacro
    #LibCurl_ImportLib = "/usr/lib/libcurl.3.dylib"
    #LibCurl_SeparatorDir = "/"
  CompilerCase #PB_OS_Windows
    Macro SymbolName(Val)
      DQuote _#Val#DQuote
    EndMacro
    #LibCurl_ImportLib = "LibCurl.lib"
    #LibCurl_SeparatorDir = "\"
CompilerEndSelect

;- Imports
ImportC #LibCurl_ImportLib
  curl_easy_cleanup(handle.l) As SymbolName(_curl_easy_cleanup)
  curl_easy_duphandle(handle.l) As SymbolName(_curl_easy_duphandle)
  curl_easy_getinfo(curl.l, info_type.l, info.l) As SymbolName(_curl_easy_getinfo)
  curl_easy_init() As SymbolName(_curl_easy_init)
  curl_easy_perform(handle.l) As SymbolName(_curl_easy_perform)
  curl_easy_recv(*curl, *buffer, buflen.l,*n) As SymbolName(_curl_easy_recv)
  curl_easy_reset(handle.l) As SymbolName(_curl_easy_reset)
  curl_easy_send(*curl, *buffer, buflen.l, *n) As SymbolName(_curl_easy_send)
  curl_easy_setopt(handle.l, option.l, parameter.l) As SymbolName(_curl_easy_setopt)
  curl_easy_strerror(errornum.l) As SymbolName(_curl_easy_strerror)
  curl_escape(url.l, length.l) As SymbolName(_curl_escape)
  curl_formadd(firstitem.l, lastitem.l) As SymbolName(_curl_formadd)
  curl_formfree(form.l) As SymbolName(_curl_formfree)
  curl_formget(*form.curl_httppost, *arg, append) As SymbolName(_curl_formget)
  curl_free(ptr.l) As SymbolName(_curl_free)
  curl_getdate(datestring.l, now.l) As SymbolName(_curl_getdate)
  curl_getenv(name.l) As SymbolName(_curl_getenv)
  curl_global_cleanup() As SymbolName(_curl_global_cleanup)
  curl_global_init(flags.l) As SymbolName(_curl_global_init)
  curl_global_init_mem(flags.l, m.l, f.l, r.l, s.l, c.l) As SymbolName(_curl_global_init_mem)
  curl_mprintf(format.l) As SymbolName(_curl_mprintf)
  curl_mfprintf(fd.l, format.l) As SymbolName(_curl_mfprintf)
  curl_msprintf(buffer.l, format.l) As SymbolName(_curl_msprintf)
  curl_msnprintf(buffer.l, maxlength.l, format.l) As SymbolName(_curl_msnprintf)
  curl_mvprintf(format.l, args.l) As SymbolName(_curl_mvprintf)
  curl_mvfprintf(fd.l, format.l, args.l) As SymbolName(_curl_mvfprintf)
  curl_mvsprintf(buffer.l, format.l, args.l) As SymbolName(_curl_mvsprintf)
  curl_mvsnprintf(buffer.l, maxlength.l, format.l, args.l) As SymbolName(_curl_mvsnprintf)
  curl_maprintf(format.l) As SymbolName(_curl_maprintf)
  curl_mvaprintf(format.l, args.l) As SymbolName(_curl_mvaprintf)
  curl_multi_add_handle(multi_handle.l, easy_handle.l) As SymbolName(_curl_multi_add_handle)
  curl_multi_assign(*multi_handle, sockfd.l, *sockp) As SymbolName(_curl_multi_assign)
  curl_multi_cleanup(multi_handle.l) As SymbolName(_curl_multi_cleanup)
  curl_multi_fdset(multi_handle.l, read_fd_set.l, write_fd_set.l, exc_fd_set.l, max_fd.l) As SymbolName(_curl_multi_fdset)
  curl_multi_info_read(multi_handle.l, msgs_in_queue.l) As SymbolName(_curl_multi_info_read)
  curl_multi_init() As SymbolName(_curl_multi_init)
  curl_multi_perform(multi_handle.l, running_handles.l) As SymbolName(_curl_multi_perform)
  curl_multi_remove_handle(multi_handle.l, easy_handle.l) As SymbolName(_curl_multi_remove_handle)
  curl_multi_strerror(errornum.l) As SymbolName(_curl_multi_strerror)
  curl_multi_socket(*multi_handle, s.l, *running_handles) As SymbolName(_curl_multi_socket)
  curl_multi_socket_action(*multi_handle, s.l, ev_bitmask.l, *running_handles) As SymbolName(_curl_multi_socket_action)
  curl_multi_socket_all(*multi_handle, *running_handles) As SymbolName(_curl_multi_socket_all)
  curl_share_cleanup(share_handle.l) As SymbolName(_curl_share_cleanup)
  curl_share_init() As SymbolName(_curl_share_init)
  curl_share_setopt(share.l, option.l, parameter.l) As SymbolName(_curl_share_setopt)
  curl_share_strerror(errornum.l) As SymbolName(_curl_share_strerror)
  curl_slist_append(slist.l, string.p-utf8) As SymbolName(_curl_slist_append)
  curl_slist_free_all(slist.l) As SymbolName(_curl_slist_free_all)
  curl_strequal(str1.l, str2.l) As SymbolName(_curl_strequal)
  curl_strnequal(str1.l, str2.l, len.l) As SymbolName(_curl_strnequal)
  curl_unescape(url.l, length.l) As SymbolName(_curl_unescape)
  curl_version() As SymbolName(_curl_version)
  curl_version_info(type.l) As SymbolName(_curl_version_info)
EndImport;}


Procedure RW_LibCurl_InitString()
  Shared ReceivedData.s
  If ReceivedData > ""
    ReceivedData = ""
  EndIf
EndProcedure
Procedure RW_LibCurl_InitData()
  Shared *LibCurl_SharedMem
  If *LibCurl_SharedMem
    FreeMemory(*LibCurl_SharedMem)
    *LibCurl_SharedMem = 0
  EndIf
EndProcedure
ProcedureC  RW_LibCurl_WriteStrFunction(*ptr, Size, NMemB, *Stream)
  ;retreives utf-8/ascii encoded data
  Protected SizeProper.l  = Size & 255
  Protected NMemBProper.l = NMemB
  Protected MyDataS.s
  Shared ReceivedData.s
  
  MyDataS = PeekS(*ptr, SizeProper * NMemBProper)
  ReceivedData + MyDataS
  ;Debug "> " + MyDataS
  ;Debug "# " + Str(Len(MyDataS))
  ;Debug "@ " + Str(Len(ReceivedData))
  ProcedureReturn SizeProper * NMemBProper
EndProcedure
Procedure.s RW_LibCurl_GetString()
  Shared ReceivedData.s
  ProcedureReturn ReceivedData
EndProcedure
ProcedureC  RW_LibCurl_WriteDataFunction(*ptr, Size, NMemB, *Stream)
  Protected plSize.l  = Size & 255
  Protected plNmemB.l = NMemB
  Protected plMemorySize.l = plSize * plNmemB
  Protected plLibCurl_SharedMemSize.l
  
  Protected *LibCurl_TempMemory
  Protected *LibCurl_TempSharedMem
  
  Shared *LibCurl_SharedMem

  ; allocates memory for receiving data
  *LibCurl_TempMemory = AllocateMemory(plMemorySize)
  CopyMemory(*ptr, *LibCurl_TempMemory, plMemorySize)
  
  ; if memory doesn't exists
  If *LibCurl_SharedMem = 0
    *LibCurl_SharedMem = AllocateMemory(plMemorySize)
    CopyMemory(*LibCurl_TempMemory, *LibCurl_SharedMem, plMemorySize)
  Else
    ; we allocate a temporary memory zone for storing previous *LibCurl_SharedMem
    plLibCurl_SharedMemSize  = MemorySize(*LibCurl_SharedMem)
    *LibCurl_TempSharedMem = AllocateMemory(plLibCurl_SharedMemSize)
    CopyMemory(*LibCurl_SharedMem, *LibCurl_TempSharedMem, plLibCurl_SharedMemSize)
    ; we free *LibCurl_SharedMem
    FreeMemory(*LibCurl_SharedMem)
    ; we allocate *LibCurl_SharedMem wtih size of previous *LibCurl_SharedMem + new data
    *LibCurl_SharedMem = AllocateMemory(plLibCurl_SharedMemSize + plMemorySize)
    CopyMemory(*LibCurl_TempSharedMem,  *LibCurl_SharedMem,                         plLibCurl_SharedMemSize)
    CopyMemory(*LibCurl_TempMemory,     *LibCurl_SharedMem+plLibCurl_SharedMemSize, plMemorySize)
    ; we free memory
    FreeMemory(*LibCurl_TempMemory)
    FreeMemory(*LibCurl_TempSharedMem)
  EndIf
  ProcedureReturn plMemorySize
EndProcedure
Procedure RW_LibCurl_GetData()
  Shared *LibCurl_SharedMem
  Protected *LibCurl_NewMemory
  *LibCurl_NewMemory = AllocateMemory(MemorySize(*LibCurl_SharedMem))
  CopyMemory(*LibCurl_SharedMem, *LibCurl_NewMemory, MemorySize(*LibCurl_SharedMem))
  ProcedureReturn *LibCurl_NewMemory
EndProcedure
Maintenant à la compilation j'ai une erreur sur le chargement de la base de données sql lignes 249 sur cette commande:

Code : Tout sélectionner

DatabaseUpdate(glSQLiteDB, psSQLRequest)
Message du compilateur: Le #Database spécifié n'est pas initialisé.
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

Pas d'idée ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenStreetMap embarqué dans votre application

Message par djes »

Regarde dans la procédure OSM_CacheInit() et vérifie tout (surtout l'ouverture de la base de données) à grands coups de Debug.
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

Voici la Procedure OSM_CacheInit()

Code : Tout sélectionner

Procedure OSM_CacheInit()
  Protected psSQLRequest.s
  If gsSQLiteDBPath = ""
    gsSQLiteDBPath = GetCurrentDirectory() + "OSMCache.sqlite"
  EndIf
  If FileSize(gsSQLiteDBPath) <= 0
    If CreateFile(0, gsSQLiteDBPath)
      CloseFile(0)
    EndIf
    glSQLiteDB = OpenDatabase(#PB_Any, gsSQLiteDBPath, "", "", #PB_Database_SQLite)
    Debug glSQLiteDB
    If glSQLiteDB
      psSQLRequest = "CREATE  TABLE "+#_DQ_+"main"+#_DQ_+"."+#_DQ_+"cache"+#_DQ_+" ("
      psSQLRequest + #_DQ_+"id_cache"+#_DQ_+" INTEGER PRIMARY KEY  AUTOINCREMENT  Not NULL , "
      psSQLRequest + #_DQ_+"cache_layer"+#_DQ_+" INTEGER Not NULL  Default 0, "
      psSQLRequest + #_DQ_+"cache_zoom"+#_DQ_+" INTEGER Not NULL , "
      psSQLRequest + #_DQ_+"cache_x"+#_DQ_+" INTEGER Not NULL , "
      psSQLRequest + #_DQ_+"cache_y"+#_DQ_+"  INTEGER Not NULL , "
      psSQLRequest + #_DQ_+"cache_image"+#_DQ_+" BLOB, "
      psSQLRequest + #_DQ_+"cache_imagesize"+#_DQ_+"  INTEGER Not NULL"
      psSQLRequest + ")"
      DatabaseUpdate(glSQLiteDB, psSQLRequest)
    EndIf
  Else
    glSQLiteDB = OpenDatabase(#PB_Any, gsSQLiteDBPath, "", "")
  EndIf  
EndProcedure

Franchement je ne voie pas. Quand je fait un Debug sur gsSQLiteDBPath j'ai bien le chemin ou à été créée la base de données.

Quand je fait un Debug sur glSQLiteDB qui lui est égale à

Code : Tout sélectionner

OpenDatabase(#PB_Any, gsSQLiteDBPath, "", "", #PB_Database_SQLite)
Voici le retour de debug:

Code : Tout sélectionner

5550472
Mais arrivée ici:

Code : Tout sélectionner

DatabaseUpdate(glSQLiteDB, psSQLRequest)
Le programme plante et me dit que la base de données n'est pas initialisé.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenStreetMap embarqué dans votre application

Message par djes »

Tu mets un calldebugger() juste avant cette fonction, et en passant la souris sur les variables, tu auras leurs valeurs, il y a fort à parier que l'une d'entre elles soit nulle. Alors tu avances l'exécution pas à pas pour voir...
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

Non justement aucune n'est nulle.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenStreetMap embarqué dans votre application

Message par djes »

Hum, il y a un loup là ! Dans la doc sur cette fonction, l'exemple lui-même ne comporte pas de numéro de base de données
DatabaseUpdate("UPDATE employee SET checked=1 WHERE id="+GetDatabaseString(#BaseDeDonnees, 0))
Je me demande si l'implémentation sur MacOS est correcte... Peux-tu essayer l'exemple de la doc :

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Database example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
   Result = DatabaseUpdate(Database, Query$)
   If Result = 0
      Debug DatabaseError()
   EndIf
   
   ProcedureReturn Result
EndProcedure

DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"

If CreateFile(0, DatabaseFile$)
   CloseFile(0)
   
   If OpenDatabase(0, DatabaseFile$, "", "")
   
      CheckDatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), weight INT)")

      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
      CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
      
      If DatabaseQuery(0, "SELECT * FROM food WHERE weight > 7")
      
         While NextDatabaseRow(0)
            Debug GetDatabaseString(0, 0)
         Wend
      
         FinishDatabaseQuery(0)
      EndIf
      
      CloseDatabase(0)
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf

Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

L'exemple de la doc fonctionne très bien. C'est un truc de fou...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenStreetMap embarqué dans votre application

Message par djes »

Et si dans l'exemple tu mets 6000000 comme numéro de db à la place de 0 ?
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

Le compilateur s'arrête à "CreateFile() et me dit:

Code : Tout sélectionner

ERREUR: Le numéro d'objet #File est très élevé (au dessus de 1000), Etes-vous sûr ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenStreetMap embarqué dans votre application

Message par djes »

Ca ce n'est pas grave, c'est juste un avertissement, tu peux continuer l'execution en appuyant sur F7. En plus, tu peux laisser 0 pour le file, c'est pour les commandes basées sur une base de données *database qu'il faut essayer avec une autre valeur.

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Database example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
   Result = DatabaseUpdate(Database, Query$)
   If Result = 0
      Debug DatabaseError()
   EndIf
   
   ProcedureReturn Result
EndProcedure

DatabaseFile$ = GetTemporaryDirectory()+"Database.sqlite"

If CreateFile(0, DatabaseFile$)
   CloseFile(0)
   
   If OpenDatabase(6000000, DatabaseFile$, "", "")
   
      CheckDatabaseUpdate(6000000, "CREATE TABLE food (name CHAR(50), weight INT)")

      CheckDatabaseUpdate(6000000, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
      CheckDatabaseUpdate(6000000, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
      CheckDatabaseUpdate(6000000, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
      
      If DatabaseQuery(6000000, "SELECT * FROM food WHERE weight > 7")
      
         While NextDatabaseRow(6000000)
            Debug GetDatabaseString(6000000, 0)
         Wend
      
         FinishDatabaseQuery(6000000)
      EndIf
      
      CloseDatabase(6000000)
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf

Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: OpenStreetMap embarqué dans votre application

Message par MetalOS »

Et bien non tous fonctionne bien même avec cette valeur :lol: c'est du délire...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenStreetMap embarqué dans votre application

Message par djes »

Bon ben tu n'as plus qu'à mettre un calldebugger au début du programme et faire du pas à pas (entrant) en vérifiant toutes les valeurs à chaque fonction... Bon courage ! :-)
Répondre