Guest --Alberto Mota -- Postado Outubro 7, 2008 Denunciar Share Postado Outubro 7, 2008 Prezados colegas depois de muito pesquisar não encontrei a solução. No Access para inserir um novo registro num campo numero(tem que ser assim e não autonumeração) uso o seguinte código no evento no atual do formMe.NumeroPedidoNovo.DefaultValue = "=" & Nz(DMax("NumeroPedidoNovo", "TblVendaSaidaNovo"), 0) + 1Gostaria de fazer isso no SQLSERVER(capturar o ultimo registro máximo e acrescentar 1 ao novo) . Pois utilizo Access como front-end e o SQLSERVER será o meu back-end. Como implemento isso? Desde já agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Jefferson Alves Postado Outubro 8, 2008 Denunciar Share Postado Outubro 8, 2008 Alberto,Se o objetivo é obter o último número de chave ou pedido na tabela, basta criar uma stored procedure (função MAX no select) que retorne este valor, lembrando de dar o devido tratamento em caso de inexistência de valor. Espero ter ajudado em algo, a menos que não tenha entendido ainda a sua necessidade.JeffersonPrezados colegas depois de muito pesquisar não encontrei a solução. No Access para inserir um novo registro num campo numero(tem que ser assim e não autonumeração) uso o seguinte código no evento no atual do formMe.NumeroPedidoNovo.DefaultValue = "=" & Nz(DMax("NumeroPedidoNovo", "TblVendaSaidaNovo"), 0) + 1Gostaria de fazer isso no SQLSERVER(capturar o ultimo registro máximo e acrescentar 1 ao novo) . Pois utilizo Access como front-end e o SQLSERVER será o meu back-end. Como implemento isso? Desde já agradeço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Alberto Mota -- Postado Outubro 9, 2008 Denunciar Share Postado Outubro 9, 2008 Jefferson, bom dia. O que você entendeu é correto. E como seria essa stored procedure? você poderia disponibilizar um exemplo, por favor? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 11, 2008 Denunciar Share Postado Outubro 11, 2008 (editado) bom vo apagar o otro tópico seu la porque não tem sentido ter dois topicos. mas beleza, pelo menos serviu pra me chama a atencao, pois tinha esquecido desse aqui.então alberto, acontece q no sql não tem formulario, onde você esta fazendo sua programacao?? você podia fazer isso pela sua linguagem de programcao. a funcao max() retorna o ultimo numero. exemplo:Select Max(Numero) As Ultimo From Tabela ou você pode fazer isso na procedure tb como disse o jefferson. primero de tudo, você sabe usar stored procedure?? como eu não sei os detalhes do seu sistema e do q você quer fazer, não sei direito qual parte exatamente preciso te explicar, mas o codigo na procedure seria esse: Declare @Ultimo Int Select @Ultimo = Max(Numero) From Tabela[/code]ai o ultimo numero vai estar gravado na variavel @Ultimo e você faz o q quiser com ele.EDITADO:note q quando a tabela esta vazia (e você tiver q gravar o codigo 1), o Max() vai retornar nulo. ai você ve como quer fazer o teste, pode checar com o Is Null (mais pratico e com menos processamento) ou pode antes fazer um select q retorne o Count(*) e se for 0 você nem pega o Max() e já grava 1. Editado Outubro 11, 2008 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Alberto Mota -- Postado Outubro 15, 2008 Denunciar Share Postado Outubro 15, 2008 (editado) Preado Kiori, consegui resolver. Segue o código abaixo da procedure. E o que é mais interesante é que não preciei dela. No Acces, não havia referenciado a biblioteca do ADO e o que antes eu fazia, continua no SQLSERVER.No Access Coloquei no evento no atual Me.NumeroPedidoNovo.DefaultValue = "=" & Nz(DMax("NumeroPedidoNovo", "TblVendaSaidaNovo"), 0) + 1========================No SQLSERVER set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_inserevda] AS Declare @Ultimo Int Select @Ultimo = Max(NumeroPedidoNovo)+1 From TblVendaSaidaNovo INSERT Into TblVendaSaidaNovo (NumeroPedidoNovo) values (@Ultimo) E me deparei com outro problema( Não vou abrir um novo tópico). É uma questão de parcelamento onde apenas o campo data dá erro. Segue o código no Access(Projeto ADP) Private Sub Comando41_Click() If IsNull(Me.CboDocumento) Then MsgBox "Informe o tipo de pagamento", 64, "Aviso" DoCmd.CancelEvent Exit Sub End If Dim oConn As ADODB.Connection Dim oRs As ADODB.Recordset Dim duplicata As ADODB.Recordset Dim strConn As String Set oConn = New ADODB.Connection Set oRs = New ADODB.Recordset Set duplicata = New ADODB.Recordset strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=wa;Initial Catalog=wa;Data Source=ALBERTO-PC\SQLEXPRESS" oConn.Open strConn duplicata.Open "TblDuplicatas", oConn For X = 1 To Me.bytParcelas2.Column(0) Tipo = Me.CboDocumento vr = Me.Texto34 / Me.bytParcelas2.Column(0) Numero = Me.lngNumContrato dt2 = DateAdd("m", X, Me.DtaEmissao) SQL = "INSERT INTO TblDuplicatas (BaseNota, ValorDupl, DtVctoDupl, TipoDocumento) VALUES (" & Numero & ",'" & vr & "','" & dt2 & "','" & Tipo & "')" Set duplicata = oConn.Execute(SQL) Next Me.TblDuplicatas.Requery oConn.Close Set oConn = Nothing Set oRs = Nothing Set duplicata = Nothing MsgBox "Dados inseridos com sucesso!", 64, "Aviso" End SubA mensagem de erro é a seguinte:The conversion of a char data type to a datetime data type resulted in an out-of-range datetime valueSe for posivel, como faço a conversão em cima desse código? Um abraço. Editado Outubro 17, 2008 por kuroi Adicionar tag CODE Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 17, 2008 Denunciar Share Postado Outubro 17, 2008 Preado Kioriquem??Se for posivel, como faço a conversão em cima desse código? Um abraço.albert, você ta querendo trasnforma o codigo do access em stored procedure no sql ou ta querendo corrigir o codigo do access. em q linha exatamente acontece esse erro?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Alberto Mota -- Postado Outubro 22, 2008 Denunciar Share Postado Outubro 22, 2008 (editado) Kuroi consegui resolver. Desculpe a demora em retornar. Segue o código. Tive que adaptar uma função de formatação de datas. Segue o código:Function FormataMoeda(valor) sp = Mid(FormatNumber(1000, 0, -1, 0, -1), 2, 1) sv = Mid(FormatNumber(0.1, 1, -1, 0, -1), 2, 1) If IsNumeric(valor) Then v = FormatNumber(valor, 0, -1, 0, -1) Else v = FormatNumber(0, 2, -1, 0, -1) End If v = Replace(v, sp, "p") v = Replace(v, sv, "v") v = Replace(v, "p", ".") v = Replace(v, "v", ",") FormataMoeda = v End Function If IsNull(Me.CboDocumento) Then MsgBox "Informe o tipo de pagamento", 64, "Aviso" DoCmd.CancelEvent Exit Sub End If Dim oConn As ADODB.Connection Dim oRs As ADODB.Recordset Dim duplicata As ADODB.Recordset Dim strConn As String Set oConn = New ADODB.Connection Set oRs = New ADODB.Recordset Set duplicata = New ADODB.Recordset strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=wa;Initial Catalog=wa;Data Source=ALBERTO-PC\SQLEXPRESS" oConn.Open strConn duplicata.Open "TblDuplicatas", oConn For X = 1 To Me.bytParcelas2.Column(0) Tipo = Me.CboDocumento vr = Me.Texto34 / Me.bytParcelas2.Column(0) vr = FormataMoeda(vr) Numero = Me.lngNumContrato dt2 = DateAdd("m", X, Me.DtaEmissao) d = Day(dt2) m = Month(dt2) a = Year(dt2) DtVcto2 = a & "/" & m & "/" & d SQL = "INSERT INTO TblDuplicatas (BaseNota, ValorDupl, DtVctoDupl, TipoDocumento) VALUES (" & Numero & ",'" & vr & "','" & DtVcto2 & "','" & Tipo & "')" Set duplicata = oConn.Execute(SQL) Next Me.TblDuplicatas.Requery Set duplicata = Nothing MsgBox "Dados inseridos com sucesso!", 64, "Aviso" End SubEstou com problemas na casa decimal( valores tipo conforme a divisão) 1500,67 dá erro. Mas vou pesquisar um pouco mais. Se não conseguir pedirei ajuda. Sucesso! Editado Outubro 22, 2008 por kuroi Adicionar tag CODE Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 22, 2008 Denunciar Share Postado Outubro 22, 2008 Estou com problemas na casa decimal( valores tipo conforme a divisão) 1500,67 dá erro.da erro onde?? e qual a mensagem??se for na hora de gravar, acontece q você tem q gravar com ponto (1500.67) e não com virgula (porque virgula serve pra separar campos). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Alberto Mota -- Postado Outubro 23, 2008 Denunciar Share Postado Outubro 23, 2008 Kuroi, resolvido definitivamente. você tinha razão. Capturei as decimais, concatenei com os inteiros e resolveu.Era relativo ao pontoNum resultado ex: 1500,67Inteiros= 1500decimais= 67Concatenação = inteiros & "." & decimais = 1500.67Simples. Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest --Alberto Mota --
Prezados colegas depois de muito pesquisar não encontrei a solução.
No Access para inserir um novo registro num campo numero(tem que ser assim e não autonumeração) uso o seguinte código no evento no atual do form
Me.NumeroPedidoNovo.DefaultValue = "=" & Nz(DMax("NumeroPedidoNovo", "TblVendaSaidaNovo"), 0) + 1
Gostaria de fazer isso no SQLSERVER(capturar o ultimo registro máximo e acrescentar 1 ao novo) .
Pois utilizo Access como front-end e o SQLSERVER será o meu back-end.
Como implemento isso?
Desde já agradeço.
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.