Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2010, 13:54   #1
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию Ввод значений формы в базу.

Здравствуйте,

Видимо происходит несовмещение типов в коде, как это можно исправить?
Сами поля в базе трех типов - числовой, дата и текстовый.

Код:
Private Sub Command3_Click()
Dim n As String
Dim d As String
Dim t As String
    n = Nz(Me.[num], "Null")
    d = CLng(Me.[data])
    t = Nz(Me.[textt], "Null")
Debug.Print n
Debug.Print d
Debug.Print t
    vivod = "INSERT INTO table1 (n, d, t)"
    vivod = vivod & " Select " & n & ", " & d & ", " & t
Debug.Print vivod
    CurrentDb.Execute vivod
    DoCmd.GoToRecord , , acNewRec
End Sub
Вложения
Тип файла: rar insert_into_baza.rar (13.0 Кб, 12 просмотров)
NickiBell вне форума Ответить с цитированием
Старый 14.10.2010, 16:03   #2
LittleFatCat
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 68
По умолчанию

Доброго времени суток!

Ваши данные текстового типа, поэтому при формировании запроса они должны заключаться в кавычки (в примере - одинарные):
vivod & " Select '" & n & "', '" & d & "', '" & t & "'"

Не совсем понятна CLng - что она делает (если преобразует в длинное целое - то потом это число присваивается строковой переменной, зачем?)
LittleFatCat вне форума Ответить с цитированием
Старый 15.10.2010, 00:07   #3
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию

Спасибо за подсказку об одинарных кавычках.

Код:
Private Sub Command3_Click()
Dim n As String
Dim d As Date
Dim t As String
    n = Nz(Me.[num], "Null")
    d = Nz(Me.[data], "Null")
    t = Nz(Me.[textt], "Null")
    vivod = "INSERT INTO table1 (num, data, textt)"
    vivod = vivod & " Select '" & n & "', '" & d & "', '" & t & "'"
    CurrentDb.Execute vivod
    DoCmd.GoToRecord , , acNewRec
End Sub
Кавычки исправила и дате присвоила формат даты. Такой метод использования даты я увидела в одном примере и воспользовалась им, просто как дата не работал почему-то.

Сейчас записи вводятся из формы в таблицу, но они почему-то дублируются. Вроде бы нажатие на кнопку дважды мною не происходил, проверяла. Может быть еще что-то надо было учесть?
Вложения
Тип файла: rar insert_into_baza_2.rar (18.5 Кб, 11 просмотров)
NickiBell вне форума Ответить с цитированием
Старый 18.10.2010, 13:24   #4
LittleFatCat
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 68
По умолчанию

Доброго времени суток!

Здесь все дело в том, что форма при открытии сама становится на новую запись, т.к. в свойствах формы стоит "Ввод данных - Да". После того, как нажата кнопка, происходит переход на новую запись командой
Код:
Docmd.GoToRecord , , acNewRec
. При этом значения, введенные в поля, сохраняются. Плюс к этому еще и выполняется запрос на вставку тех же данных. Вот вам и дублирование.
Надо использовать что-то одно - или запрос, или переход к новой записи, т.е. какую-то из частей кода удалить
LittleFatCat вне форума Ответить с цитированием
Старый 19.10.2010, 02:13   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте NickiBell.
предположение и рекомендация LittleFatCat: "..Ваши данные текстового типа, поэтому..они должны заключаться..", не совсем корректно,
Вы писали: "..поля в базе трех типов - числовой, дата и текстовый...".

Да для текстовых полей кавычки обязательны, для полей даты приемлемы, но для числовых полей кавычки недопустимы.
И не только по этому Ваш код нуждается в корректировке,
выражение :
Nz(Me.[textt], "Null") - значению NULL присвоит текст "Null", а далее как Вы понимаете "NULL" (в кавычках) в SQL конструкции работать не будет.

Рекомендую подкорректировать код.
Успехов Вам.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 29.10.2010, 16:47   #6
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию

Большое спасибо LittleFatCat и Teslenko_EA за разъяснительную информацию.
До этого у меня не было возможности зайти и разобраться с этой задачей по некоторым причинам.

Обнаружила. что текстовые поля оказывается вовсе не надо было связывать с базой, они должны были быть нейтральными, лишь только потому дублировались записи.

Программку я исправила и привожу новый вариант.
Вложения
Тип файла: rar insert_into_baza.rar (39.2 Кб, 12 просмотров)
NickiBell вне форума Ответить с цитированием
Старый 29.10.2010, 16:50   #7
NickiBell
Пользователь
 
Регистрация: 15.09.2010
Сообщений: 16
По умолчанию

Код:
Private Sub Command3_Click()
Dim n As String
Dim d As String
Dim t As String
    n = Nz(Me.[tnum], "Null")
    d = CLng(Me.[tdata])
    t = Nz(Me.[ttextt])
    vivod = "INSERT INTO table1 (num, data, textt)"
    vivod = vivod & " Select " & n & "," & d & ", '" & t & "'"

    CurrentDb.Execute vivod
    Me.Table1_subform.Requery
    tnum.Value = ""
    tdata.Value = Date
    ttextt.Value = ""
    
End Sub
NickiBell вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
dbgideh. ввод с клавиатуры значений не всегда находит в списке Tanuska___:) БД в Delphi 0 08.09.2010 11:54
Ввод бланка в базу данных access Norick БД в Delphi 6 24.02.2010 16:55
Удаление и ввод значений в ячейках segail Microsoft Office Excel 0 16.12.2009 09:45
Передача значений из excel в базу данных elmeera Общие вопросы Delphi 3 13.03.2009 10:57
Настройки формы сохранить в базу KurtWagner БД в Delphi 8 11.02.2009 20:29