Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Копирование записи в БД


Автор: Flotskiy 23.3.2005, 09:17
Добрый день всем!
Понадобилась ваша помощь или совет.
Суть: На форме расположено 45 текстовых полей, при помощи которых заносятся данные новой книги в БД Access. Все работает. Но бывает, что приходит новая книга, данные почти все уже внесены, а разница бывает в стоимости или названии издателя. Приходится вносить новую запись. Было-бы хорошо скопировать похожую запись, а потом отредактировать ее.
Я пробовал вот так:
Код

Private Sub Command1_Click()
On Error GoTo sError
Dim dbBibliot As Database
      Set dbBibliot = OpenDatabase(gDataBaseName)
        dbBibliot.Execute "INSERT INTO Titles SELECT * " & _
     " FROM Titles WHERE InventNumber=" & Text2.Text
        MsgBox "Запись скопирована"
sError:
  Dim sError As String
  sError = "Error Number: " & Err.Number & vbCrLf
  sError = sError & Err.Description
  MsgBox (sError)
  
End Sub

и получается вот что:
в таблице есть поле - ID- счетчик, и если неиндексированное то копирование происходит, потом можно редактировать любое поле новой записи, но не поле ID (в которое вставляется значение копируемой записи);
если поле счетчика поставить как индексированное (совпадения не допускаются) - что и нужно в процессе дальнейшей обработки - то копирования не происходит.
Это один способ пытался применить.
А нельзя ли скопировать все поля (45) в буфер обмена, нажать "Новая запись" и вставить все из буфера?
Это второй способ.
Если нельзя ничего сделать, подскажите, не буду ломать голову.
С уважением




Автор: boevik 23.3.2005, 09:31
Можно, только копировать не в буфер, в переменные (желательно определить структуру) и после загрузки формы заполнить поля.

Автор: Flotskiy 23.3.2005, 09:44
boevik, Привет.
Это как?
Код

Dim txt1
Dim txt2
......
txt1= Text1(0).Text
txt2=Text1(1).Text
...


Примерно так?

Автор: Akina 23.3.2005, 10:05
В форме нажатие Ctrl-' приводит к копированию в новую запись контента предыдущей записи.

Автор: Flotskiy 23.3.2005, 12:38
Akina, извини, не понял тебя, растолкуй.

Автор: boevik 23.3.2005, 12:44
Цитата(Flotskiy @ 23.3.2005, 09:44)
Примерно так?

Примерно так.

Автор: cardinal 23.3.2005, 13:37
Flotskiy, тебе вот это надо сделать
Цитата(boevik @ 23.3.2005, 07:31)
желательно определить структуру

по принципу
http://forum.vingrad.ru/index.php?showtopic=38139&view=findpost&p=295850
Тогда жизнь станет проще.

Автор: Flotskiy 24.3.2005, 06:52
Доброе утро всем!

boevik, по твоей подсказке сделал так:
Код

Option Explicit
Dim txt1 As String 'BBK
Dim txt2 As String ' UDK
Dim txt3 As String ' Avt
Dim txt4 As String ' Soavt
Dim txt5 As String ' PodRed
.........................

Private Sub Command1_Click() ' копирование в переменные
Command1.Visible = False
Command2.Visible = True
txt1 = Text1(0).Text
txt2 = Text1(1).Text
txt3 = Text1(2).Text
txt4 = Text1(3).Text
txt5 = Text1(4).Text
.........................
End Sub

Private Sub Command2_Click() ' вставка значений переменных в текстовые поля.
Command2.Visible = False
Command1.Visible = True
 Text1(0).Text = txt1
 Text1(1).Text = txt2
 Text1(2).Text = txt3
 Text1(3).Text = txt4
 Text1(4).Text = txt5

End Sub


Работает прекрасно, только вопрос: надо обнулять переменные после вставки, что-то
txt1="" ?
С уважением

Автор: boevik 24.3.2005, 08:01
Flotskiy, или же ручками снова всё прописывать.
Или же замени txt1, txt2, ... на массив и обнуляй в цикле.

К примеру твой код будет выглядить так:
Код

Option Explicit
Dim txt(4) As String 
.........................

Private Sub Command1_Click() ' копирование в переменные
Dim i as integer
Command1.Visible = False
Command2.Visible = True
For i = 0 to 4
   txt(i) = Text1(i).Text
Next i
.........................
End Sub

Private Sub Command2_Click() ' вставка значений переменных в текстовые поля.
Dim i as integer
Command2.Visible = False
Command1.Visible = True
 For i = 0 to 4
   Text1(i).Text = txt(i)
Next i
End Sub


Как сделать обнуление, я думаю ты уже догадываешься.

Regards.

Автор: Flotskiy 24.3.2005, 08:11
boevik, я понял тебя, благодарю всех за помощь.
С уважением

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)