Como obter e actualizar um campo de texto do SQL Server utilizando o ADO

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

180368
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
Este artigo demonstra como aceder e actualizar campos de texto de grandes dimensões (Binary Large Objects/BLOBS) utilizando o ActiveX Data Objects (ADO). Isto é conseguido utilizando os métodos GetChunk e AppendChunk do objecto do campo do conjunto de registos um ADODB.
Mais Informação

Projecto de exemplo do Step by Step

  1. Abra um novo projecto. É criado o Form1 por predefinição.
  2. A partir do menu projecto , clique em References e definir uma referência para o Microsoft ActiveX Data Objects Library.
  3. Adicionar um novo módulo padrão ao projecto e cole o seguinte código:
       Global cn As ADODB.Connection   Global cmd1 As ADODB.Command   Global rsset As ADODB.Recordset   Const BLOCKSIZE As Long = 4096   Public Sub ColumnToFile(Col As ADODB.Field, DiskFile As String)    'Retrieves data from the database and puts it into a temp file on    'the hard drive.    'The size of the chunk is in the variable BLOCKSIZE (4096).   Dim NumBlocks As Long  'Holds the number of chunks.   Dim LeftOver As Long   '# of chars left over after last whole chunk.   Dim strData As String   Dim DestFileNum As Long   Dim I As Long   Dim ColSize As Long   'Make sure that you aren't in an empty recordset.    If Not rsset.EOF And Not rsset.BOF Then    ColSize = Col.ActualSize   'If filelength > 0, then it is soiled:   ' throw away contents.    If Len(Dir$(DiskFile)) > 0 Then      Kill DiskFile    End If    DestFileNum = FreeFile    Open DiskFile For Binary As DestFileNum    NumBlocks = ColSize \ BLOCKSIZE    LeftOver = ColSize Mod BLOCKSIZE    'Now Write data to the file in chunks.     For I = 1 To NumBlocks     strData = String(BLOCKSIZE, 0)     strData = Col.GetChunk(BLOCKSIZE)     Put DestFileNum, , strData     Next I     strData = String(LeftOver, 0)     strData = Col.GetChunk(LeftOver)     Put DestFileNum, , strData     Close DestFileNum     End If      End Sub     Sub FileToColumn(Col As ADODB.Field, DiskFile As String)     'Takes data from the temp file and saves it to the database.       Dim strData As String       Dim NumBlocks As Long       Dim FileLength As Long       Dim LeftOver As Long       Dim SourceFile As Long       Dim I As Long       SourceFile = FreeFile       Open DiskFile For Binary Access Read As SourceFile       FileLength = LOF(SourceFile)       If FileLength = 0 Then        Close SourceFile        MsgBox DiskFile & " Empty or Not Found."       Else        NumBlocks = FileLength \ BLOCKSIZE        LeftOver = FileLength Mod BLOCKSIZE        Col.AppendChunk Null        strData = String(BLOCKSIZE, 0)        For I = 1 To NumBlocks         Get SourceFile, , strData         Col.AppendChunk strData        Next I        strData = String(LeftOver, 0)        Get SourceFile, , strData        Col.AppendChunk strData        rsset.Update        Close SourceFile       End If      End Sub      Public Sub FileToForm(DiskFile As String, SomeControl As Control)       'Retrieves data from the temp file and puts it onto the control.       Dim SourceFile As Long       Dim FileLength As Long       Dim strData As String       SourceFile = FreeFile       Open DiskFile For Binary Access Read As SourceFile       FileLength = LOF(SourceFile)       If FileLength = 0 Then        Close SourceFile        MsgBox DiskFile & " Empty or Not Found."       Else        strData = String(FileLength, 0)        Get SourceFile, , strData        SomeControl.Text = strData        Close SourceFile       End If      End Sub      Sub FormToFile(DiskFile As String, SomeControl As Control)       'Saves data from the form into a temp file on the local hard drive.       Dim DestinationFile As Long       Dim FileLength As Long       Dim strData As String       If Len(Dir$(DiskFile)) > 0 Then        Kill DiskFile       End If       DestinationFile = FreeFile       Open DiskFile For Binary As DestinationFile       strData = SomeControl.Text       Put DestinationFile, , strData       Close DestinationFile      End Sub
  4. Utilizar a predefinição Form1:
    1. Adicione um controlo RichTextBox e defina a propriedade de Nome para "rtbText."
    2. Adicione um controlo CommandButton e defina a propriedade de Nome para "cmdPrev" e a propriedade legenda como "Anterior"
    3. Adicionar um controlo CommandButton e definir a propriedade de Nome para "cmdNext" e a propriedade legenda 'Seguinte'.
    4. Adicione um controlo CommandButton e defina a propriedade de Nome para "cmdSave" e a propriedade legenda como "Actualização".
  5. Cole o seguinte código no formulário:
       Option Explicit   Dim DiskFile As String      Private Sub cmdNext_Click()       If (rsset.RecordCount > 0) And (Not rsset.EOF) Then        rsset.MoveNext        If Not rsset.EOF Then         rtbText.Text = ""         ColumnToFile rsset.Fields("pr_info"), DiskFile         FileToForm DiskFile, rtbText        Else         rsset.MoveLast        End If       End If      End Sub      Private Sub cmdPrev_Click()       If (rsset.RecordCount > 0) And (Not rsset.BOF) Then        rsset.MovePrevious        If Not rsset.BOF Then         rtbText.Text = ""         ColumnToFile rsset.Fields("pr_info"), DiskFile         FileToForm DiskFile, rtbText        Else         rsset.MoveFirst        End If       End If      End Sub      Private Sub cmdSave_Click()       FormToFile DiskFile, rtbText       FileToColumn rsset.Fields("pr_info"), DiskFile      End Sub      Private Sub Form_Activate()       rtbText.Text = ""       If rsset.RecordCount > 0 Then        rsset.MoveFirst        ColumnToFile rsset.Fields("pr_info"), DiskFile        FileToForm DiskFile, rtbText       End If      End Sub      Private Sub Form_Load()       Dim ConnectString As String       Dim anerror As ADODB.Error       Dim Sql As String       On Error GoTo handler       DiskFile = App.Path & "\BLOB.txt"       'Set the connect string to use pubs on your SQL server.       ConnectString = _       "Driver={SQL SERVER};Server=<yourserver>;Database=pubs;UID=sa;pwd=;"       Sql = "SELECT pr_info FROM pub_info;"       Set cn = New ADODB.Connection       cn.ConnectionString = ConnectString       cn.Open       Set rsset = New ADODB.Recordset       rsset.Open Sql, cn, adOpenKeyset, adLockOptimistic, adCmdText      Exit Sub      handler:       For Each anerror In cn.Errors        Debug.Print anerror.Number & ":  " & anerror.Description & _        " - " & anerror.SQLState       Next anerror      End Sub
  6. Altere nomeservidor in a cadeialigação para o nome do servidor.
  7. Execute o projecto de exemplo. RichTextBox irá conter o primeiro registo do conjunto de registos.
  8. Clique em seguinte . Repare que o conteúdo da RichTextBox alterado para o registo seguinte até chegar ao último registo. O botão ' seguinte ' chama o método MoveNext de conjunto de registos e, em seguida, chama os métodos ColumnToFile e FileToForm .
  9. Clique em anterior . Repare que o conteúdo da RichTextBox alterado para o registo anterior até atingir o primeiro registo. O botão ' anterior ' chama MovePrevious método o conjunto de registos e, em seguida, chama os métodos ColumnToFile e FileToForm .
  10. Escreva algo de novo na caixa de texto e, em seguida, clique em actualização para modificar o campo de texto em qualquer registo que está no. No botão Actualizar chama os métodos FormToFile e FileToColumn , que por sua vez chama o método de Actualizar o conjunto de registos. Os novos dados deverão obter actualizados na base de dados.
secção BLOB concatenar

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 180368 - Última Revisão: 02/22/2014 06:57:42 - Revisão: 1.5

  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Office 97 Professional Edition
  • kbnosurvey kbarchive kbmt kbdatabase kbhowto KB180368 KbMtpt
Esta informação foi útil?