MAC ADRESS DO SERVIDOR
Citação:Citação: MacAddress é o campo da tabela que esse script gera Sim, pela lógica seria, mas não esta vindo, acho que algo na string não esta formatado corretamente, mesmo sendo a mesma que usei no vb.net. Esta retornando nula ou vazia.sql = "declare @t table (i uniqueidentifier default newsequentialid(), m as cast(i as char(36))) insert into @t default values; select substring(m,25,2) + '-' + substring(m,27,2) + '-' + substring(m,29,2) + '-' + substring(m,31,2) + '-' + substring(m,33,2) + '-' + substring(m,35,2) AS MacAddress FROM @t"Set Rs = New ADODB.RecordsetRs.Open sql, Cnn, adOpenForwardOnly, adLockReadOnlyIf Not Rs.EOF Then MsgBox ("mac " & Rs!MacAddress)End If
No VB6 tem uma questão ai é que esse consulta retorna dois recordsets, um do resultado do insert e outro do select, é só pegar o proximo recordset usando a funcao NextRecordset dele
Dim cnn As New ADODB.Connection
cnn.Open "Provider=sqloledb;Server=meuservidor;Database=bancodedados;UID=usuario;PWD=senha;"
Dim cmd As New ADODB.Command
cmd.CommandText = "declare @t table (i uniqueidentifier default newsequentialid(), m as cast(i as char(36)))" _
& vbCrLf & "insert into @t default values;" _
& vbCrLf & "select substring(m,25,2) + '-' + substring(m,27,2) + '-' + substring(m,29,2) + '-' + substring(m,31,2) + '-' + substring(m,33,2) + '-' + substring(m,35,2) AS MacAddress FROM @t"
Set cmd.ActiveConnection = cnn
Dim ret As ADODB.Recordset
Set ret = cmd.Execute()
Set ret = ret.NextRecordset()
MsgBox ret!MacAddress
Quanto ao que o WEBMASTER falou, olhando simplesmente o código parece mesmo isso, mas existe uma tecnicalidade ali que faz com que isso possa ser usado para algo que não é o uso normal dela.
No caso a função newsequentialid() não retorna simplesmente um Guid qualquer, e sim um que ele garante que vai ser único, nunca repetindo, e pra isso funcionar em PCs diferentes e ainda retornar um valor único ele coloca o endereço MAC como parte do guid, dai esse código só se aproveita disso pra tirar de um guid gerado o endereço em si
NEWID()
Um guid dinamico e randomico que evita colisão
newsequentialid()
Um guid unico e que pode gerar colisão pois será gerado por máquina
Isso ?
Citação:Ou seja...NEWID()Um guid dinamico e randomico que evita colisãonewsequentialid()Um guid unico e que pode gerar colisão pois será gerado por máquinaIsso ?
Pelo que entendi não, pois ao gerar o ID, usa o mac na composição, acho que é ao contrário.
Que estranho, usar ou não o MAC na composição/geração é meio que chover no molhado, pois é principio básico de qualuqer UUID (como GUID) que ele seja de fato UNIVERSAL, ou seja, nunca haverá 2 valores iguais "no mundo".
Implicitamente, entendo eu, que algum algoritmo interno considera SEMENTES individuais (baseado em MAC ou algo mais baixo nivel de hardware da maquina).
Sendo assim, NEWID() ou NEWSEQUENTIALID() no fundo geram o mesmo resultado (sempre sem colisão).
Um GUID randomico não vai te dar essa resposta.
Citação:Bom, entendo eu que toda a discussão foi para a esquerda e o problema está na direita.Um GUID randomico não vai te dar essa resposta.
Estou aceitando sugestões para que eu possa obter o mac do servidor de banco de dados via código sql, se essa consulta traz essa informação, resolve o problema, senão aceito sugestões e ajuda dos colegas.