Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Edwilson Curti

Contar registros na tabela

Recommended Posts

Prezados Colegas,

 

Estou desenvolvendo um aplicativo em VB, utilizando BD Firebird. O que desejo é:

 

" Quero contar o número de registros de uma determinada tabela e armazenar o resultado em uma variável.

Já tentei:

SELECT COUNT(*) AS NREG FROM TABELA

mas não consigo armazenar o resultado na variável para ser usado depois no sistema.

 

Aliás, sei que SELECT COUNT(*) AS NREG FROM TABELA, armazena a contagem em NREG, mas como fazer uso do valor armazenado em NREG?

 

Tentei

Dim NMREG as integer
NUMREG=NREG

, mas não funciona.

 

Alguém aí tem uma sugestão?

 

Obrigado por enquanto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está dando certo porque ele não sabe o que é o NREG. Seu NREG é o nome de uma tabela, quer dizer, não é uma variável declarada no seu código.

 

Faz o seguinte, você deve ter declarado uma variável como recordset para receber sua query, se fez isso mesmo tente assim:

 

vamos supor que sua variável que está recebendo sua query chama-se rs.

Dim NMREG as integer
NMREG = rs("NREG")

Caso o que você fez esteja diferente disso que estou supondo que tenha feito, põe seu código ai que te ajudo.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom você tocar neste assunto do recordset. Eu o usei quando o BD era Access. Agora que estou usando o FIREBIRD, não

defini nenhuma variável assim.

 

Na verdade pensei em criar o código do registro, baseado no número de registros existentes na tabela + 1. Por isso eu queria contar os registros e depois adicionar.

Mas já que você se dispôs a me ajudar, vou direto a uma outra idéia que tive.

Me diga então, o que fazer para que o ponteiro seja movido para o último registro da tabela, ler o código do último registro e adicionar à uma variável para que depois eu some + 1, formando assim o número do novo registro a ser adicionado na tabela.

 

Me entendeu?

 

Veja abaixo o código do formulário.:

Option Explicit
Dim msg As String	   'Mensagem.
Dim sql_grava As String 'Armazena a query para gravação dos dados na tabela.
Dim sql_conta As String 'Armazena a query para consulta do número de registros na tabela.
Dim numreg As Integer   'Armazena o valor do contador para formar o número da localidade a ser cadastrada.

Private Sub cmdcancela_Click()
	cmdgrava.Enabled = False
	cmdcancela.Enabled = False
	LIMPA_CAMPOS
	cmdinc.Enabled = True
	cmdinc.SetFocus
End Sub

Private Sub cmdcancela_GotFocus()
	If Control1 = 5 Then
		LIMPA_CAMPOS
		cmdinc.Enabled = True
		cmdcancela.Enabled = False
		Control1 = 0
	End If
End Sub

Private Sub cmdfecha_Click()
	Unload frmlocalidades
End Sub

Private Sub cmdgrava_Click()
	sql_grava = "Insert Into LOCALIDADES(COD_PESQ,CIDADE_CLI,LOCALIDADE_LOCAL) Values('" & txtcodpesq & "','" & txtcidpesq & "','" & txtlocalid & "')"
	conexao_bd.Execute sql_grava
	LIMPA_CAMPOS
	cmdinc.Enabled = True
	cmdcancela.Enabled = False
End Sub

Private Sub cmdinc_Click()
	Control1 = 0
	lbltit2.Caption = "Incluir Dados"
	ATIVA_CAMPOS
	GERA_COD_LOCALID
	txtcodloc.Text = numreg
	cmdinc.Enabled = False
	cmdcancela.Enabled = True
End Sub

Private Sub DataGrid2_Click()
	DataGrid2.Col = 0
		frmlocalidades.lblcodp.Caption = DataGrid2.Text
		frmlocalidades.txtcodpesq.Text = DataGrid2.Text
End Sub

Private Sub DataGrid3_Click()
	DataGrid3.Col = 4
		frmlocalidades.lblcidp.Caption = DataGrid3.Text
		frmlocalidades.txtcidpesq.Text = DataGrid3.Text
		cmdgrava.Enabled = True
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
	SendKeys ("{TAB}")
	KeyAscii = 0
End If
KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub Form_Load()
	DataGrid1.ZOrder
	DataGrid1.Refresh
End Sub

Private Sub TabStrip1_Click()
	If TabStrip1.SelectedItem.Index = 1 Then
		Control1 = 0
		cmdgrava.Enabled = False
		LIMPA_CAMPOS
		cmdrelat.Enabled = True
		cmdfecha.Enabled = True
		DataGrid1.ZOrder
		DataGrid1.Refresh
	ElseIf TabStrip1.SelectedItem.Index = 2 Then
		Control1 = 0
		cmdinc.Enabled = True
		cmdcancela.Enabled = False
		cmdrelat.Enabled = False
		'cmdfecha.Enabled = False
		cmdgrava.Enabled = False
		fracad.ZOrder
		cmdinc.SetFocus
	End If
End Sub

Private Sub txtcodcli_KeyPress(KeyAscii As Integer)
If KeyAscii <> vbKey0 And KeyAscii <> vbKey1 And KeyAscii <> vbKey2 And KeyAscii <> vbKey3 And KeyAscii <> vbKey4 And KeyAscii <> vbKey5 And KeyAscii <> vbKey6 And KeyAscii <> vbKey7 And KeyAscii <> vbKey8 And KeyAscii <> vbKey9 And KeyAscii <> 8 Then
	KeyAscii = 0
End If
End Sub

Private Sub txtncont_KeyPress(KeyAscii As Integer)
If KeyAscii <> vbKey0 And KeyAscii <> vbKey1 And KeyAscii <> vbKey2 And KeyAscii <> vbKey3 And KeyAscii <> vbKey4 And KeyAscii <> vbKey5 And KeyAscii <> vbKey6 And KeyAscii <> vbKey7 And KeyAscii <> vbKey8 And KeyAscii <> vbKey9 And KeyAscii <> 8 Then
	KeyAscii = 0
End If
End Sub

Private Function LIMPA_CAMPOS()
	lbltit2.Caption = ""
	lblcodp.Caption = ""
	lblcidp.Caption = ""
	txtlocalid.Text = ""
	txtcodpesq.Text = ""
	txtcidpesq.Text = ""
	txtlocalid.Enabled = False
	DataGrid2.Enabled = False
	DataGrid3.Enabled = False
	cmdgrava.Enabled = False
End Function

Private Function ATIVA_CAMPOS()
	txtlocalid.Enabled = True
	DataGrid2.Enabled = True
	DataGrid3.Enabled = True
	txtlocalid.SetFocus
End Function
Private Function GERA_COD_LOCALID()

End Function

Private Sub txtrgin_KeyPress(KeyAscii As Integer)
If KeyAscii <> vbKey0 And KeyAscii <> vbKey1 And KeyAscii <> vbKey2 And KeyAscii <> vbKey3 And KeyAscii <> vbKey4 And KeyAscii <> vbKey5 And KeyAscii <> vbKey6 And KeyAscii <> vbKey7 And KeyAscii <> vbKey8 And KeyAscii <> vbKey9 And KeyAscii <> 8 Then
	KeyAscii = 0
End If
End Sub

Private Sub txtlocalid_Change()
	If txtlocalid.Text <> "" Then
		cmdgrava.Enabled = True
	Else
	End If
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro colega,

 

Não conheço o Firebird, mas ele deve ter algo do tipo "autonumeração" do Access ou Identity do SQL Server para evitar esse trabalho de controlar a numeração dos registros.

Imagine se dois usuários iniciam a inserção de registros ao mesmo tempo ou praticamente juntos: ambos estarão com números iguais e na hora do inert pode dar problema.

O campo autonumeração resolve o problema sem maiores complicações.

Se ainda assim, precisar do recordset...

Dim cnn as new AdoDB Connection
Dim rst as new ADODB.Recordset
Dim Contador as integer

set rst = cnn.execute "Select count (campo) as qtd from sua_tabela"
contador = rst!qtd

+/- por aí.

 

Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Edwilson, que bom que conseguiu, mas olhando seu código e com a informação que passou sobre não utilizar recordset.

 

É muito diferente esse firebird? Como sua conexão funcionou sem a utilização do recordset?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Claudio, meu código era assim:

 

Option Explicit

Public conexao_bd As New ADODB.Connection 'String de conexão com o BD.

Public codexcluir As String

 

Eu defini a variável de conexão como sendo pública e o restante do código é o que você viu postado, ou melhor era pois agora eu o alterei totalmente e com o uso do Recordset, minha vida melhorou muito. Antes, podes crer, eu consegui salvar o registro, mas para manipular estava dando a maior dor de cabeça.

 

Meu código agora está assim:

 

Option Explicit

Dim msg As String 'Mensagem.

Dim sql_grava As String 'Armazena a query para gravação dos dados na tabela.

Dim sql_conta As String 'Armazena a query para consulta do número de registros na tabela.

Dim numlocalid As Integer 'Armazena o valor do contador para formar o número da localidade a ser cadastrada.

 

Private Sub cmdcancela_Click()

cmdgrava.Enabled = False

cmdcancela.Enabled = False

LIMPA_CAMPOS

cmdinc.Enabled = True

cmdinc.SetFocus

End Sub

 

Private Sub cmdcancela_GotFocus()

If control1 = 5 Then

LIMPA_CAMPOS

cmdinc.Enabled = True

cmdcancela.Enabled = False

control1 = 0

End If

End Sub

 

Private Sub cmdfecha_Click()

Unload frmlocalidades

End Sub

 

Private Sub cmdgrava_Click()

sql_grava = "Insert Into LOCALIDADES(COD_PESQ,CIDADE_CLI,LOCALIDADE_LOCAL) Values('" & txtcodpesq & "','" & txtcidpesq & "','" & txtlocalid & "')"

conexao_bd.Execute sql_grava

LIMPA_CAMPOS

cmdinc.Enabled = True

cmdcancela.Enabled = False

End Sub

 

Private Sub cmdinc_Click()

control1 = 0

lbltit2.Caption = "Incluir Dados"

ATIVA_CAMPOS

GERA_COD_LOCALID

txtcodloc.Text = numlocalid

cmdinc.Enabled = False

cmdcancela.Enabled = True

End Sub

 

Private Sub DataGrid2_Click()

DataGrid2.Col = 0

frmlocalidades.lblcodp.Caption = DataGrid2.Text

frmlocalidades.txtcodpesq.Text = DataGrid2.Text

End Sub

 

Private Sub DataGrid3_Click()

DataGrid3.Col = 4

frmlocalidades.lblcidp.Caption = DataGrid3.Text

frmlocalidades.txtcidpesq.Text = DataGrid3.Text

cmdgrava.Enabled = True

End Sub

 

Private Sub Form_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKeyReturn Then

SendKeys ("{TAB}")

KeyAscii = 0

End If

KeyAscii = Asc(UCase(Chr(KeyAscii)))

End Sub

 

Private Sub Form_Load()

DataGrid1.ZOrder

DataGrid1.Refresh

End Sub

 

Private Sub TabStrip1_Click()

If TabStrip1.SelectedItem.Index = 1 Then

control1 = 0

cmdgrava.Enabled = False

LIMPA_CAMPOS

cmdrelat.Enabled = True

cmdfecha.Enabled = True

DataGrid1.ZOrder

DataGrid1.Refresh

ElseIf TabStrip1.SelectedItem.Index = 2 Then

control1 = 0

cmdinc.Enabled = True

cmdcancela.Enabled = False

cmdrelat.Enabled = False

'cmdfecha.Enabled = False

cmdgrava.Enabled = False

fracad.ZOrder

cmdinc.SetFocus

End If

End Sub

 

Private Sub txtcodcli_KeyPress(KeyAscii As Integer)

If KeyAscii <> vbKey0 And KeyAscii <> vbKey1 And KeyAscii <> vbKey2 And KeyAscii <> vbKey3 And KeyAscii <> vbKey4 And KeyAscii <> vbKey5 And KeyAscii <> vbKey6 And KeyAscii <> vbKey7 And KeyAscii <> vbKey8 And KeyAscii <> vbKey9 And KeyAscii <> 8 Then

KeyAscii = 0

End If

End Sub

 

Private Sub txtncont_KeyPress(KeyAscii As Integer)

If KeyAscii <> vbKey0 And KeyAscii <> vbKey1 And KeyAscii <> vbKey2 And KeyAscii <> vbKey3 And KeyAscii <> vbKey4 And KeyAscii <> vbKey5 And KeyAscii <> vbKey6 And KeyAscii <> vbKey7 And KeyAscii <> vbKey8 And KeyAscii <> vbKey9 And KeyAscii <> 8 Then

KeyAscii = 0

End If

End Sub

 

Private Function LIMPA_CAMPOS()

lbltit2.Caption = ""

lblcodp.Caption = ""

lblcidp.Caption = ""

txtcodloc.Text = ""

txtlocalid.Text = ""

txtcodpesq.Text = ""

txtcidpesq.Text = ""

txtlocalid.Enabled = False

DataGrid2.Enabled = False

DataGrid3.Enabled = False

cmdgrava.Enabled = False

End Function

 

Private Function ATIVA_CAMPOS()

txtlocalid.Enabled = True

DataGrid2.Enabled = True

DataGrid3.Enabled = True

txtlocalid.SetFocus

End Function

Private Function GERA_COD_LOCALID()

With cnnComando

.ActiveConnection = conexao_bd

.CommandType = adCmdText

.CommandText = "Select * From LOCALIDADES "

Set rsSelecao = .Execute

End With

If rsSelecao.RecordCount <> 0 Then

rsSelecao.MoveLast 'Move o ponteiro para o último registro.

numlocalid = rsSelecao("COD_LOCAL") + 1

Else

numlocalid = 1

End If

Set cnnComando = Nothing

Set rsSelecao = Nothing

 

End Function

 

Private Sub txtrgin_KeyPress(KeyAscii As Integer)

If KeyAscii <> vbKey0 And KeyAscii <> vbKey1 And KeyAscii <> vbKey2 And KeyAscii <> vbKey3 And KeyAscii <> vbKey4 And KeyAscii <> vbKey5 And KeyAscii <> vbKey6 And KeyAscii <> vbKey7 And KeyAscii <> vbKey8 And KeyAscii <> vbKey9 And KeyAscii <> 8 Then

KeyAscii = 0

End If

End Sub

 

Private Sub txtlocalid_Change()

If txtlocalid.Text <> "" Then

cmdgrava.Enabled = True

Else

End If

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.