Clipper On Line • Ver Tópico - MediaMonkey, SQLite, HeidiSQL

MediaMonkey, SQLite, HeidiSQL

Discussão sobre SQL

Moderador: Moderadores

 

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 28 Jul 2020 20:28

Player de música... MediaMonkey

sqlite2.png


Que tal acessar a base dele?

sqlite1.png


Interessante a brincadeira.
Agora é descobrir como usar isso no Harbour, ou no ADO, quem sabe.

Nota: O artista do álbum é pra diferenciar das músicas do meu filho kkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 28 Jul 2020 21:02

O Harbour já tem SQLLite embutido, funciona sem nada adicional.

Só se quiser usar ADO, aí é do de sempre, instalar o ODBC

http://www.ch-werner.de/sqliteodbc/
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 28 Jul 2020 22:42

Fica fácil imaginar como o MediaMonkey escolhe músicas.
E daria pra usar no aplicativo igual.

mediamonkey.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 28 Jul 2020 22:44

No lugar deste.
Ao invés de encher de filtros, permitir que o usuário adicione filtros se precisar.
Ficaria menos poluído de opções, ao mesmo tempo que poderia dar mais opções.

relatorio.png


É pra se pensar....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 30 Jul 2020 05:32

Uia.....
ADO é ADO....
Dizemos pra ele qual é o ODBC e pronto.

PROCEDURE PTESSQLITE

   LOCAL oTBrowse
   LOCAL cnSQL := ADOClass():New( SQLiteConnection( "D:\TOOLS\MediaMonkey\MM.DB" ) )

   WITH OBJECT cnSQL
      :cSQL := "SELECT ID, SongTitle, FileLength, SongLength, Rating, Bitrate, Encoder FROM Songs"
      :Execute()
      oTBrowse := { ;
         { "ID", { || Str( :Number( "ID" ), 10 ) } }, ;
         { "SongTitle",  { || :String( "SongTitle", 50 ) } }, ;
         { "FileLength", { || Str( :Number( "FileLength" ), 16 ) } }, ;
         { "SongLenth",  { || Str( :Number( "SongLength" ), 16 ) } }, ;
         { "Bitrate",    { || Str( :Number( "Bitrate" ), 16 ) } }, ;
         { "Encoder",    { || :String( "Encoder", 20 ) } } }
      BrowseADO( cnSQL, oTBrowse, "SONGTITLE" )
      :CloseRecordset()
   ENDWITH

   RETURN


sqlite.png


Acessando a biblioteca do MediaMonkey, em formato SQLite3.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 30 Jul 2020 06:07

PROCEDURE PTESSQLITE

   LOCAL oTBrowse
   LOCAL cnSQL := ADOClass():New( SQLiteConnection( "D:\TOOLS\MediaMonkey\MM.DB" ) )

   WITH OBJECT cnSQL
      :cSQL := "SELECT Songs.ID, SongTitle, FileLength, SongLength, Rating, Bitrate, Encoder," + ;
         " IDAlbum, Artists.Artist, Albums.Album" + ;
         " FROM Songs" + ;
         " INNER JOIN Albums ON Albums.ID = Songs.IDAlbum" + ;
         " INNER JOIN ArtistsSongs ON ArtistsSongs.IDSong = Songs.ID" + ;
         " INNER JOIN Artists ON Artists.ID = ArtistsSongs.IDArtist" + ;
         " WHERE Artists.Artist = 'iron maiden'" + ;
         " ORDER BY Artists.Artist, SongTitle"
      :Execute()
      oTBrowse := { ;
         { "ID",         { || Str( :Number( "ID" ), 10 ) } }, ;
         { "Artist",     { || :String( "Artist", 50 ) } }, ;
         { "SongTitle",  { || :String( "SongTitle", 50 ) } }, ;
         { "FileLength", { || Str( :Number( "FileLength" ), 16 ) } }, ;
         { "SongLenth",  { || Str( :Number( "SongLength" ), 16 ) } }, ;
         { "Bitrate",    { || Str( :Number( "Bitrate" ), 16 ) } }, ;
         { "Encoder",    { || :String( "Encoder", 20 ) } } }
      BrowseADO( cnSQL, oTBrowse, "SONGTITLE" )
      :CloseRecordset()
   ENDWITH

   RETURN


-2147467259 no such collation sequence: IUNICODE (1)
Full SQL:
SELECT Songs.ID, SongTitle, FileLength, SongLength, Rating, Bitrate, Encoder, IDAlbum, Artists.Artist, Albums.Album FROM Songs INNER JOIN Albums ON Albums.ID = Songs.IDAlbum INNER JOIN ArtistsSongs ON ArtistsSongs.IDSong = Songs.ID INNER JOIN Artists ON Artists.ID = ArtistsSongs.IDArtist WHERE Artists.Artist = 'iron maiden' ORDER BY Artists.Artist, SongTitle;


Do fórum do MediaMonkey:

We use custom Collation in our DB due the limits of SQLite and if you are able to import data from linked Tables than you should be safe. but searches and edits back can need Collation and will throw an errors.


Por causa de limitações do SQLite, o MediaMonkey usa página de caracteres CUSTOMIZADA.

https://www.mediamonkey.com/forum/viewtopic.php?t=93400
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 30 Jul 2020 06:11

Só comentário sobre o comando:

Songs contém as músicas e IDAlbum
Albums contém o nome dos álbums
ArtistsSongs contém IDSongs e IDArtista
Artists contém o nome dos artistas

Então, pra pegar a música, o nome do disco, e o nome do artista, precisa dos 4
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 30 Jul 2020 06:24

Sem o ORDER BY funciona.

PROCEDURE PTESSQLITE

   LOCAL oTBrowse
   LOCAL cnSQL := ADOClass():New( SQLiteConnection( "D:\TOOLS\MediaMonkey\MM.DB" ) )

   WITH OBJECT cnSQL
      :cSQL := "SELECT Songs.ID, SongTitle, FileLength, SongLength, Rating, Bitrate, Encoder," + ;
         " IDAlbum, Artists.Artist, Albums.Album" + ;
         " FROM Songs" + ;
         " INNER JOIN Albums ON Albums.ID = Songs.IDAlbum" + ;
         " INNER JOIN ArtistsSongs ON ArtistsSongs.IDSong = Songs.ID" + ;
         " INNER JOIN Artists ON Artists.ID = ArtistsSongs.IDArtist" + ;
         " WHERE Artists.Artist LIKE '%iron maiden%'"
      :Execute()
      oTBrowse := { ;
         { "ID",         { || Str( :Number( "ID" ), 10 ) } }, ;
         { "Artist",     { || :String( "Artist", 20 ) } }, ;
         { "Album",      { || :String( "Album", 20 ) } }, ;
         { "SongTitle",  { || :String( "SongTitle", 50 ) } }, ;
         { "FileLength", { || Str( :Number( "FileLength" ), 16 ) } }, ;
         { "SongLenth",  { || Str( :Number( "SongLength" ), 16 ) } }, ;
         { "Bitrate",    { || Str( :Number( "Bitrate" ), 16 ) } }, ;
         { "Encoder",    { || :String( "Encoder", 20 ) } } }
      BrowseADO( cnSQL, oTBrowse, "SONGTITLE" )
      :CloseRecordset()
   ENDWITH

   RETURN


mediamonkey.png


Suposição:
codepage customizada, precisa conhecer a codepage pra poder colocar em ordem.

Não gostei da palavra "limitação", e muito menos do banco SQLite acabar não sendo padrão.
Mas de qualquer forma é interessante....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 30 Jul 2020 06:29

Lembrei da diferença entre MySQL e SQL Server....
No SQLite é igual MySQL: aceitou LIMIT 10

      :cSQL := "SELECT Songs.ID, SongTitle, FileLength, SongLength, Rating, Bitrate, Encoder," + ;
         " IDAlbum, Artists.Artist, Albums.Album" + ;
         " FROM Songs" + ;
         " INNER JOIN Albums ON Albums.ID = Songs.IDAlbum" + ;
         " INNER JOIN ArtistsSongs ON ArtistsSongs.IDSong = Songs.ID" + ;
         " INNER JOIN Artists ON Artists.ID = ArtistsSongs.IDArtist" + ;
         " WHERE Artists.Artist LIKE '%iron maiden%'" + ;
         " LIMIT 10"


Não testei outros comandos, mas.... o aplicativo poderia funcionar em SQLite ou MySQL apenas trocando a string de conexão, pelo menos para esses comandos básicos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MediaMonkey, SQLite, HeidiSQL

Mensagempor JoséQuintas » 30 Jul 2020 06:41

A única coisa que mudou para o MySQL foi a string de conexão.

FUNCTION SQLiteConnection( cFileName )

   LOCAL oConexao := win_OleCreateObject( "ADODB.Connection" )

   oConexao:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" ) + ;
      "Driver={SQLite3 ODBC Driver};Database=" + cFileName + ";"
   oConexao:CursorLocation := AD_USE_CLIENT
   oConexao:CommandTimeOut := 20

   RETURN oConexao


Atenção ao SQLITE3 no nome, porque se usar SQLITE diz que a base está corrompida !!!!
Talvez no SQLite anterior não houvesse opção de codepage/collation.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro