Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

Mostrando postagens com marcador usuário. Mostrar todas as postagens
Mostrando postagens com marcador usuário. Mostrar todas as postagens

VBA Tips - GetUserName - API - Obtendo o nome do Usuário com API

Retorne o nome do usuário usando uma API.


Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long






Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...


Tags: VBA, Tips, GetUserName, API, nome, usuário, user, name, username, advapi32.dll, 



VBA Access Advanced - Usando o DDL - Data Definition Language.


Exemplos de Código com o DDL

SQL padrão é uma sublinguagem utilizada no MS Access para lidar com os dados, tabelas, querys, etc...

Objeto
Tipo
Tabela
1
Query
5
Tabela Conectada 
4, 6, or 8
Formulário
-32768
Relatório
-32764
Módulo
-32761

  • Data Manipulation Language (DML)O comando SELECT e queries de ação (DELETE, UPDATE, INSERT INTO, ...)


  • Data Definition Language (DDL)Comandos que alterem o "schema" (Mudando tabelas, campos, índices, relações, queries, etc.)

Usando o DML para queries, poderemos ler alguns aspectos do "schema" do banco de dados.

Poderá listar os objetos na base de dados Access como abaixo: 

SELECT MSysObjects.Type, MSysObjects.Name FROM MSysObjects WHERE MSysObjects.Name Not Like "~*" ORDER BY MSysObjects.Type, MSysObjects.Name;

Onde Type poderá colocar um dos valores da tabela acima. (Infelizmente, o modo provido pelo DML não é o caminho mais fácil para se ler os nomes dos campos nas tabelas.)

DDL provê outras características de intervenção como:

  • CREATE TABLE para gerar uma nova tabela, especificando os nomes dos campos, tipos, e constraints.


  • ALTER TABLE para adicionar uma coluna para a tabela, deletar uma coluna na tabela, ou mudar a tabela como tipo e tamanho da mesma.


  • DROP TABLE para deletar uma tabela.

Similarmente, você pode aplicar o comandos CREATE/ALTER/DROP em outras coisas tais como índicesconstraintsviews e procedures (queries), usuário e grupos (segurança.)

Enquanto o DDL é importante para algumas bases de dados enormes, ele é limitado no uso com o MS Access. Você pode criar um campo Texto, mas não pode configurá-lo com a propriedade Largura Diferente de Zero, ou características similares. Pode criar um campo Yes/No, mas não pode dizer que o dataentry ocorrerá por meio de um text box, ou um check box. Também poderá criar um campo Date/Time, mas não poderá configurar a sua propriedade Format. DDL não pode criar campos Hyperlink, ou campos Attachment.

Poderá executar uma query DDL sob o DAO ou ADO.

Parar DAO, use: dbEngine(0)(0).Execute strSql, dbFailOnError
Parar ADO, use: CurrentProject.Connection.Execute strSql

Algumas características do JET 4 (Access 2000 e superior) são suportados somente sob o ADO.

Uma situação na qual o DDL é realmente utilizável é quanto a mudança do Tipo ou Tamanho dos campos. Você não pode fazer isto com o DAO ou ADOX, utilizar o DDL é a técnica mais prática para estes fins. Obviamente existem outras saídas mais trabalhosas e incoerentes pelo simples fato de serem mais demoradas tanto na implementação quanto na execução.

Abaixo disponibilizo alguns exemplos para que você possa iniciar-se nas técnicas de utilização do DDL.
Índice das Funções
Descrição
CreateTableDDL()
Cria duas tabelas, seus índices e relacionamentos, ilustrando os diferentes tipos de campos suas propriedades configuradas.
CreateFieldDDL()
Ilustra como adicionar um campo para uma tabela.
CreateFieldDDL2()
Adiciona um campo a uma tabela em outra base de dados.
CreateViewDDL()
Cria uma nova query.
DropFieldDDL()
Deleta o campo de uma tabela.
ModifyFieldDDL()
Muda o tipo ou tamanho de um campo. (Este é o mais comum uso do DDL.)
AdjustAutoNum()
Configura o start da AutoNumeração.
DefaultZLS()
Cria um campo que tem por default ser uma stringque não suporta ficar vazia.

  
Option Compare Database
Option Explicit
  
Sub CreateTableDDL()
     Dim cmd As New ADODB.Command
     Dim strSql As String
  
   Let cmd.ActiveConnection = CurrentProject.Connection
  
   'Cria o "Contractor" na tabela.
    
   Let strSql = "CREATE TABLE tblDdlContractor " & _           "(ContractorID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, " & _         "Surname TEXT(30) WITH COMP NOT NULL, " & _           "FirstName TEXT(20) WITH COMP, " & _           "Inactive YESNO, " & _         "HourlyFee CURRENCY DEFAULT 0, " & _         "PenaltyRate DOUBLE, " & _           "BirthDate DATE, " & _         "EnteredOn DATE DEFAULT Now(), " & _           "Notes MEMO, " & _         "CONSTRAINT FullName UNIQUE (Surname, FirstName));"       
         "(ContractorID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, " & _
       "Surname TEXT(30) WITH COMP NOT NULL, " & _
    
       "FirstName TEXT(20) WITH COMP, " & _
           "Inactive YESNO, " & _
       "HourlyFee CURRENCY DEFAULT 0, " & _
       "PenaltyRate DOUBLE, " & _
    
       "BirthDate DATE, " & _
         "EnteredOn DATE DEFAULT Now(), " & _
         "Notes MEMO, " & _
       "CONSTRAINT FullName UNIQUE (Surname, FirstName));"
    
   Let cmd.CommandText = strSql       cmd.Execute       Debug.Print "tblDdlContractor criada."         'Cria a tabela de Booking.     
  
   cmd.Execute
  
   Debug.Print "tblDdlContractor criada."
    
   'Cria a tabela de Booking.
   Let strSql = "CREATE TABLE tblDdlBooking " & _           "(BookingID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, " & _         "BookingDate DATE CONSTRAINT BookingDate UNIQUE, " & _         "ContractorID LONG REFERENCES tblDdlContractor (ContractorID) " & _           "ON DELETE SET NULL, " & _         "BookingFee CURRENCY, " & _         "BookingNote TEXT (255) WITH COMP NOT NULL);"       
  
       "(BookingID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, " & _
       "BookingDate DATE CONSTRAINT BookingDate UNIQUE, " & _
         "ContractorID LONG REFERENCES tblDdlContractor (ContractorID) " & _
  
       "ON DELETE SET NULL, " & _
         "BookingFee CURRENCY, " & _
       "BookingNote TEXT (255) WITH COMP NOT NULL);"
  
   Let cmd.CommandText = strSql       cmd.Execute       Debug.Print "tblDdlBooking criado."  End Sub    Sub CreateFieldDDL()      Dim strSql As String     Dim db As DAO.Database           
     cmd.Execute
  
   Debug.Print "tblDdlBooking criado."
  End Sub
  
Sub CreateFieldDDL()
      Dim strSql As String
   Dim db As DAO.Database
    
   Let Set db = CurrentDb()     
   Let strSql = "ALTER TABLE MyTable ADD COLUMN MyNewTextField TEXT (5);"       db.Execute strSql, dbFailOnError       Set db = Nothing       Debug.Print "MyNewTextField adicionado para MyTable"  End Sub    Function CreateFieldDDL2()       Dim strSql As String     Dim db As DAO.Database         Set db = CurrentDb()       
  
   db.Execute strSql, dbFailOnError
    
   Set db = Nothing
  
   Debug.Print "MyNewTextField adicionado para MyTable"
  End Sub
  
Function CreateFieldDDL2()
       Dim strSql As String
   Dim db As DAO.Database
  
   Set db = CurrentDb()
  
   Let strSql = "ALTER TABLE Table IN 'C:\A&A\Junkki.mdb' ADD COLUMN MyNewField TEXT (5);"       db.Execute strSql, dbFailOnError       Set db = Nothing       Debug.Print "MyNewField Adicionado!"  End Function    Function CreateViewDDL()       Dim strSql As String         
  
   db.Execute strSql, dbFailOnError
    
   Set db = Nothing
  
   Debug.Print "MyNewField Adicionado!"
  End Function
  
Function CreateViewDDL()
       Dim strSql As String
  
   Let strSql = "CREATE VIEW qry1 as SELECT tblInvoice.* from tblInvoice;"       CurrentProject.Connection.Execute strSql  End Function    Sub DropFieldDDL()      Dim strSql As String         
  
   CurrentProject.Connection.Execute strSql
  End Function
  
Sub DropFieldDDL()
      Dim strSql As String
  
   Let strSql = "ALTER TABLE [MyTable] DROP COLUMN [DeleteMe];"       DBEngine(0)(0).Execute strSql, dbFailOnError  End Sub    Sub ModifyFieldDDL()     Dim strSql As String         
  
   DBEngine(0)(0).Execute strSql, dbFailOnError
  End Sub
  
Sub ModifyFieldDDL()
     Dim strSql As String
  
   Let strSql = "ALTER TABLE MyTable ALTER COLUMN MyText2Change TEXT(100);"       DBEngine(0)(0).Execute strSql, dbFailOnError  End Sub    Function AdjustAutoNum()     Dim strSql As String         
  
   DBEngine(0)(0).Execute strSql, dbFailOnError
  End Sub
  
Function AdjustAutoNum()
     Dim strSql As String
  
   Let strSql = "ALTER TABLE MyTable ALTER COLUMN ID COUNTER (1000,1);"       CurrentProject.Connection.Execute strSql  End Function    Function DefaultZLS()      Dim strSql As String         
  
   CurrentProject.Connection.Execute strSql
  End Function
  
Function DefaultZLS()
      Dim strSql As String
  
   Let strSql = "ALTER TABLE MyTable ADD COLUMN MyZLSfield TEXT (100) DEFAULT """";"       CurrentProject.Connection.Execute strSql  End Function
  
   CurrentProject.Connection.Execute strSql
  End Function


Tags: VBA, Acces, DDL, DML, DAO, ADO, CREATE, ALTER,DROP,índices, constraints, views e procedures,queries, usuário, grupos, users, groups, index, JET 4, ADOX



VBA Access Basic - Conectando um Banco de Dados com Nome e Usuário - Connect to database with user name and password

Conectando um Banco de Dados com Segurança em Nível de Usuário.

Segue:


Sub addUser() 
   Dim myConnection As ADOX.Catalog
   Dim newUser As ADOX.User
   Dim userName As String
   Dim newPassword As String
   
   Set myConnection = New ADOX.Catalog

   myConnection.ActiveConnection = _
        "Provider = Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\r.mdb;" & _
        "Jet OLEDB:System database=C:\Bernardess\r.mdw;" & _
        "User id=john;Password=;"

   Set newUser = New ADOX.User

   newUser.Name = userName

   myConnection.Users.Append newUser
   myConnection.Users(newUser.Name).changePassword "", newPassword
End Sub

Tags: VBA, Access, connect, SQL, database, Connecting, Server, Data Source, ADOX, Opening, Secured, User Level, Conectando, Banco de Dados, Nome, Usuário, user, name, password


VBA Tips - Código de exemplo para recuperar o nome de usuário atual

Inline image 1

Este exemplo de código, aplicado ao Microsoft Visual Basic for Applications usa a função WNetGetUser (Função API do Windows no arquivo MPR.dll) para recuperar o nome de usuário usado para estabelecer uma conexão de rede.
' Declare for call to mpr.dll.
   Declare Function WNetGetUser Lib "mpr.dll" _
      Alias "WNetGetUserA" (ByVal lpName As String, _
      ByVal lpUserName As String, lpnLength As Long) As Long
   Const NoError = 0       'The Function call was successful
   Sub GetUserName()
      ' Buffer size for the return string.
      Const lpnLength As Integer = 255
      ' Get return buffer space.
      Dim status As Integer
      ' For getting user information.
      Dim lpName, lpUserName As String

      ' Assign the buffer size constant to lpUserName.
      lpUserName = Space$(lpnLength + 1)
      ' Get the log-on name of the person using product.
      status = WNetGetUser(lpName, lpUserName, lpnLength)
      ' See whether error occurred.
      If status = NoError Then
         ' This line removes the null character. Strings in C are null-
         ' terminated. Strings in Visual Basic are not null-terminated.
         ' The null character must be removed from the C strings to be used
         ' cleanly in Visual Basic.
         lpUserName = Left$(lpUserName, InStr(lpUserName, Chr(0)) - 1)
      Else
         ' An error occurred.
         MsgBox "Unable to get the name."
         End
      End If
      ' Display the name of the person logged on to the machine.
      MsgBox "The person logged on this machine is: " & lpUserName
   End Sub

Reference
Tags: VBA, Excel, API, MPR.dll, WNetGetUser, user, name, nome, usuário,


Inline image 1

VBA Access - Usando o DML - Data Definition Language - Using DML (Data Definition Language) Effectively

VBA Access - Usando o DML - Data Definition Language - Using DML (Data Definition Language) Effectively


Exemplos de Código com o DDL

SQL padrão é uma sublinguagem utilizada no MS Access para lidar com os dados, tabelas, querys, etc...

ObjetoTipo
Tabela1
Query5
Tabela Conectada 4, 6, or 8
Formulário-32768
Relatório-32764
Módulo-32761

 

  • Data Manipulation Language (DML)O comando SELECT e queries de ação (DELETE, UPDATE, INSERT INTO, ...)

  • Data Definition Language (DDL)Comandos que alterem o "schema" (Mudando tabelas, campos, índices, relações, queries, etc.)

Usando o DML para queries, poderemos ler alguns aspectos do "schema" do banco de dados.

Poderá listar os objetos na base de dados Access como abaixo: 

SELECT MSysObjects.Type, MSysObjects.Name FROM MSysObjects WHERE MSysObjects.Name Not Like "~*" ORDER BY MSysObjects.Type, MSysObjects.Name;

Onde Type poderá colocar um dos valores da tabela acima. (Infelizmente, o modo provido pelo DML não é o caminho mais fácil para se ler os nomes dos campos nas tabelas.)

DDL provê outras características de intervenção como:

  • CREATE TABLE para gerar uma nova tabela, especificando os nomes dos campos, tipos, e constraints.

  • ALTER TABLE para adicionar uma coluna para a tabela, deletar uma coluna na tabela, ou mudar a tabela como tipo e tamanho da mesma.

  • DROP TABLE para deletar uma tabela.

Similarmente, você pode aplicar o comandos CREATE/ALTER/DROP em outras coisas tais como índicesconstraintsviews e procedures (queries), usuário e grupos (segurança.)

Enquanto o DDL é importante para algumas bases de dados enormes, ele é limitado no uso com o MS Access. Você pode criar um campo Texto, mas não pode configurá-lo com a propriedade Largura Diferente de Zero, ou características similares. Pode criar um campo Yes/No, mas não pode dizer que o dataentry ocorrerá por meio de um text box, ou um check box. Também poderá criar um campo Date/Time, mas não poderá configurar a sua propriedade Format. DDL não pode criar campos Hyperlink, ou campos Attachment.

Poderá executar uma query DDL sob o DAO ou ADO.

Parar DAO, use: dbEngine(0)(0).Execute strSql, dbFailOnError
Parar ADO, use: CurrentProject.Connection.Execute strSql

Algumas características do JET 4 (Access 2000 e superior) são suportados somente sob o ADO.

Uma situação na qual o DDL é realmente utilizável é quanto a mudança do Tipo ou Tamanho dos campos. Você não pode fazer isto com o DAO ou ADOX, utilizar o DDL é a técnica mais prática para estes fins. Obviamente existem outras saídas mais trabalhosas e incoerentes pelo simples fato de serem mais demoradas tanto na implementação quanto na execução.

Abaixo disponibilizo alguns exemplos para que você possa iniciar-se nas técnicas de utilização do DDL.
Índice das FunçõesDescrição
CreateTableDDL()Cria duas tabelas, seus índices e relacionamentos, ilustrando os diferentes tipos de campos suas propriedades configuradas.
CreateFieldDDL()Ilustra como adicionar um campo para uma tabela.
CreateFieldDDL2()Adiciona um campo a uma tabela em outra base de dados.
CreateViewDDL()Cria uma nova query.
DropFieldDDL()Deleta o campo de uma tabela.
ModifyFieldDDL()Muda o tipo ou tamanho de um campo. (Este é o mais comum uso do DDL.)
AdjustAutoNum()Configura o start da AutoNumeração.
DefaultZLS()Cria um campo que tem por default ser uma stringque não suporta ficar vazia.

   15.01.2025 

Option Compare Database

Option Explicit


' Função para criar a tabela tblDdlContractor

Sub CreateTableDDL()

    ' Declaração das variáveis necessárias

    Dim cmd As New ADODB.Command

    Dim strSql As String


    ' Define a conexão ativa para o comando

    Let cmd.ActiveConnection = CurrentProject.Connection


    ' Cria a tabela tblDdlContractor com seus campos e restrições

    strSql = "CREATE TABLE tblDdlContractor " & _

             "(ContractorID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, " & _

             "Surname TEXT(30) WITH COMP NOT NULL, " & _

             "FirstName TEXT(20) WITH COMP, " & _

             "Inactive YESNO, " & _

             "HourlyFee CURRENCY DEFAULT 0, " & _

             "PenaltyRate DOUBLE, " & _

             "BirthDate DATE, " & _

             "EnteredOn DATE DEFAULT Now(), " & _

             "Notes MEMO, " & _

             "CONSTRAINT FullName UNIQUE (Surname, FirstName));"


    ' Executa o comando SQL para criar a tabela

    Let cmd.CommandText = strSql

    cmd.Execute


    ' Imprime mensagem de sucesso

    Debug.Print "tblDdlContractor criada."


    ' Cria a tabela tblDdlBooking

    strSql = "CREATE TABLE tblDdlBooking " & _

             "(BookingID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, " & _

             "BookingDate DATE CONSTRAINT BookingDate UNIQUE, " & _

             "ContractorID LONG REFERENCES tblDdlContractor (ContractorID) " & _

             "ON DELETE SET NULL, " & _

             "BookingFee CURRENCY, " & _

             "BookingNote TEXT(255) WITH COMP NOT NULL);"


    ' Executa o comando SQL para criar a tabela

    cmd.CommandText = strSql

    cmd.Execute


    ' Imprime mensagem de sucesso

    Debug.Print "tblDdlBooking criada."

End Sub


' Função para adicionar um novo campo à tabela MyTable

Sub CreateFieldDDL()

    ' Declaração das variáveis necessárias

    Dim strSql As String

    Dim db As DAO.Database


    ' Inicializa a conexão com o banco de dados

    Set db = CurrentDb()


    ' SQL para adicionar o novo campo à tabela

    strSql = "ALTER TABLE MyTable ADD COLUMN MyNewTextField TEXT(5);"


    ' Executa o comando SQL para adicionar o campo

    db.Execute strSql, dbFailOnError


    ' Libera recursos

    Set db = Nothing


    ' Imprime mensagem de sucesso

    Debug.Print "MyNewTextField adicionado para MyTable"

End Sub


' Função para adicionar um campo à tabela de um banco de dados externo

Function CreateFieldDDL2()

    ' Declaração das variáveis necessárias

    Dim strSql As String

    Dim db As DAO.Database


    ' Inicializa a conexão com o banco de dados

    Set db = CurrentDb()


    ' SQL para adicionar o novo campo à tabela no banco de dados externo

    strSql = "ALTER TABLE Table IN 'C:\A&A\Junkki.mdb' ADD COLUMN MyNewField TEXT(5);"


    ' Executa o comando SQL para adicionar o campo

    db.Execute strSql, dbFailOnError


    ' Libera recursos

    Set db = Nothing


    ' Imprime mensagem de sucesso

    Debug.Print "MyNewField Adicionado!"

End Function


' Função para criar uma visualização (VIEW)

Function CreateViewDDL()

    ' Declaração da variável para o comando SQL

    Dim strSql As String


    ' SQL para criar a visualização (VIEW)

    strSql = "CREATE VIEW qry1 AS SELECT tblInvoice.* FROM tblInvoice;"


    ' Executa o comando SQL para criar a visualização

    CurrentProject.Connection.Execute strSql


    ' Imprime mensagem de sucesso

    Debug.Print "Visualização qry1 criada."

End Function


' Função para excluir um campo de uma tabela

Sub DropFieldDDL()

    ' Declaração da variável para o comando SQL

    Dim strSql As String


    ' SQL para excluir o campo da tabela

    strSql = "ALTER TABLE [MyTable] DROP COLUMN [DeleteMe];"


    ' Executa o comando SQL para excluir o campo

    DBEngine(0)(0).Execute strSql, dbFailOnError


    ' Imprime mensagem de sucesso

    Debug.Print "Campo DeleteMe excluído da tabela MyTable."

End Sub


' Função para modificar um campo de uma tabela

Sub ModifyFieldDDL()

    ' Declaração da variável para o comando SQL

    Dim strSql As String


    ' SQL para alterar o tipo de um campo (alterando o tamanho do campo MyText2Change)

    strSql = "ALTER TABLE MyTable ALTER COLUMN MyText2Change TEXT(100);"


    ' Executa o comando SQL para modificar o campo

    DBEngine(0)(0).Execute strSql, dbFailOnError


    ' Imprime mensagem de sucesso

    Debug.Print "Campo MyText2Change alterado para TEXT(100)."

End Sub


' Função para ajustar a configuração do tipo de campo COUNTER

Function AdjustAutoNum()

    ' Declaração da variável para o comando SQL

    Dim strSql As String


    ' SQL para ajustar o valor inicial do campo COUNTER

    strSql = "ALTER TABLE MyTable ALTER COLUMN ID COUNTER(1000,1);"


    ' Executa o comando SQL para ajustar o campo COUNTER

    CurrentProject.Connection.Execute strSql


    ' Imprime mensagem de sucesso

    Debug.Print "Campo COUNTER ID ajustado para iniciar em 1000."

End Function


' Função para adicionar um campo com valor padrão (ZLS)

Function DefaultZLS()

    ' Declaração da variável para o comando SQL

    Dim strSql As String


    ' SQL para adicionar um campo com valor padrão vazio (ZLS)

    strSql = "ALTER TABLE MyTable ADD COLUMN MyZLSfield TEXT(100) DEFAULT ' ';"


    ' Executa o comando SQL para adicionar o campo

    CurrentProject.Connection.Execute strSql


    ' Imprime mensagem de sucesso

    Debug.Print "Campo MyZLSfield adicionado com valor padrão."

End Function

 Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série de Livros nut Project 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 PUDIM PROJECT 

eBook - PT - PUDIM PROJECT 2024 - Python Volume 01 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 02 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 03 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 04 - Funções para Automatização - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 05 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 06 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 07 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 08 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 09 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 10 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 11 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes

diHITT - Notícias