vb и Oracle: подключение, изменение данных

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

vb и Oracle: подключение, изменение данных

Сообщение Anta » 19.08.2012 (Вс) 22:41

Всем доброго времени суток,
подскажите , пожалуйста как поступить и реализовать программно (я новичек в VB и Oracle).
В базе данных Оракл существует, к примеру, 10 схем, все схемы имеют одинаковое количество таблиц, с одинаковой структурой, одинаковыми названиями, но разными данными (то естью существуют 10 городов, информация хранится в идентичных таблицах, только данные разные). Мне нужно осуществить доступ к одной и той же таблице в каждой схеме, чтоб пользователь мог изменить данные (текст, цифровые значения) и сохранить изменения.
Вопросы:
1. Подключаюсь к БД прграммно (коннкшен стринг), на данный момент прописан мой логин и пароль для подключения к БД оракл. В дальнейшем, чтоб подключиться к определенной схеме (к определнному городу) нужно будет ввести код города и пароль (которые созданны в Оракл).
Как сделать так, чтобы при запуске программы появлялось окно с запросом логина и пароля, и если данные введены правильно, происходило подключение к определенной схеме (городу). Нужно создать дополнительную форму для ввода логина и пароля? при вводе нужно обратится к БД Оракл для проверки данных(логина и пароля)?
2. Моя программа делает запрос на выборку(из одной единственной таблицы) и выводит разельтат строки в textbox_ы: пользователь задаёт условие (выбирает код из комбобокса) и нажимает на кнопку "выбрать". Перед тем как осуществить следующий запрос и получить результат в textbox_ы мне нужно очистить все textbox_ы. ( результатом запроса является всегда только одна строка и не больше, такова специфика этой таблицы)
Как сделать так, чтоб при следующем нажатии на кнопку "выбрать" textbox_ы очистились и в них появился результат следующей выборки? На данный момент они очищаются, но заполнение происходит только после второго нажатия на кнопку и они заполняются старыми данными. Я провела эксперемент и одновременно вывожу результаты в DataGrid: там строки просто добавляются. Выборка данных через Dataset, dataAdapter, datatable, rows. Что нужно очисить чтоб появлялся результат следующего запроса в textbox, а не старые данные и это происходило при единоразовом нажатии на кнопку?
3. Программка разрабатывается в Visual Studio12 prerelise (кампания купит вскоре VS 12). Я хотела поработать на другом компьютере, где стоит триал версия Visual Studio12 , но программа не открывается, формы нет и выдают какие-ошибки..Подскажите, в чем проблема?

Спасибо за ранее.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: vb и Oracle: подключение, изменение данных

Сообщение FireFenix » 20.08.2012 (Пн) 4:57

Anta писал(а):1. Подключаюсь к БД прграммно (коннкшен стринг), на данный момент прописан мой логин и пароль для подключения к БД оракл. В дальнейшем, чтоб подключиться к определенной схеме (к определнному городу) нужно будет ввести код города и пароль (которые созданны в Оракл).
Как сделать так, чтобы при запуске программы появлялось окно с запросом логина и пароля, и если данные введены правильно, происходило подключение к определенной схеме (городу). Нужно создать дополнительную форму для ввода логина и пароля? при вводе нужно обратится к БД Оракл для проверки данных(логина и пароля)?

Да, нужно создать форму. Для первого раза можно использовать и InputBox

Anta писал(а):2. Моя программа делает запрос на выборку(из одной единственной таблицы) и выводит разельтат строки в textbox_ы: пользователь задаёт условие (выбирает код из комбобокса) и нажимает на кнопку "выбрать". Перед тем как осуществить следующий запрос и получить результат в textbox_ы мне нужно очистить все textbox_ы. ( результатом запроса является всегда только одна строка и не больше, такова специфика этой таблицы)
Как сделать так, чтоб при следующем нажатии на кнопку "выбрать" textbox_ы очистились и в них появился результат следующей выборки? На данный момент они очищаются, но заполнение происходит только после второго нажатия на кнопку и они заполняются старыми данными. Я провела эксперемент и одновременно вывожу результаты в DataGrid: там строки просто добавляются. Выборка данных через Dataset, dataAdapter, datatable, rows. Что нужно очисить чтоб появлялся результат следующего запроса в textbox, а не старые данные и это происходило при единоразовом нажатии на кнопку?

Код: Выделить всё
Функция Текст_Бокс_Клик
    Вызов функции очищения
    Вызов функции запроса данных
    Вызов функции заполнения текстбоксов на основе полученных данных


Anta писал(а):3. Программка разрабатывается в Visual Studio12 prerelise (кампания купит вскоре VS 12). Я хотела поработать на другом компьютере, где стоит триал версия Visual Studio12 , но программа не открывается, формы нет и выдают какие-ошибки..Подскажите, в чем проблема?
Спасибо за ранее.

Очевидно нада проверить версию и язык первого проекта, студия 2012 не поддерживает VB6
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 21.08.2012 (Вт) 4:29

Спасибо за уделенное время!

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 07.09.2012 (Пт) 4:46

Подскажите, как написать синтаксис запроса sql в VB,если в предложении встречается апостроф, quota не помогает. к примеру,
есть запрос:
Sqlstr= “Select first name from table1 where name=” ’ “+combobox1.text+ “ ’ “,
Где значение combobox1.text может быть равно О’Хенри, на данный момент запрос обрывается на апострофе после первой буквы О в фамилии,
и
другой впрос, тоже через Sqlstr выполняется запрос к таблице бд и результат выводится в listbox, при этом теряется значение слов, в смысле, вместо ё получаю е, вместо й получаю и. Как решить такую проблему? потому как наличие ё и й важно, так как выполняется другой запрос , основанный на значениях в этом listboxb и как результат-ничего, так как в таблице БД все ё и й присутсвуют в словах.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: vb и Oracle: подключение, изменение данных

Сообщение HandKot » 07.09.2012 (Пт) 6:59

Sqlstr= “Select first name from table1 where name=” ’ “+combobox1.text+ “ ’ “,
Где значение combobox1.text может быть равно О’Хенри, на данный момент запрос обрывается на апострофе после первой буквы О в фамилии,

апострофы надо дублировать
вместо ё получаю е, вместо й получаю и

это конечно странно, в базе точно Ё и Й?
I Have Nine Lives You Have One Only
THINK!

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 07.09.2012 (Пт) 14:36

HandKot писал(а):
Sqlstr= “Select first name from table1 where name=” ’ “+combobox1.text+ “ ’ “,
Где значение combobox1.text может быть равно О’Хенри, на данный момент запрос обрывается на апострофе после первой буквы О в фамилии,

апострофы надо дублировать
вместо ё получаю е, вместо й получаю и

это конечно странно, в базе точно Ё и Й?


то есть в самой таблице бд нужно продублировать апостроф?

эээ, есть вот такие фамилии-латинскими буквами: Pagé, André, Noël

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.09.2012 (Пт) 20:13

Anta писал(а):то есть в самой таблице бд нужно продублировать апостроф?

Нет конечно...
И вообще, ты на каком языке пишешь?

Anta писал(а):эээ, есть вот такие фамилии-латинскими буквами: Pagé, André, Noël

Кодировка.

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 08.09.2012 (Сб) 4:29

Qwertiy писал(а):Нет конечно...
И вообще, ты на каком языке пишешь?

я не в курсе как удвоить апострофы программно для результата выборки из БД, подскажите?
на vb в visual studio 12


Qwertiy писал(а):Кодировка.

нужно указать кодировку для результата выборки?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.09.2012 (Сб) 11:15

Anta писал(а):на vb в visual studio 12

Ну и нечего тогда строку запроса конкатенацией строить. Есть же класс SqlCommand, который сам подставляет параметры и делает это именно так, как нужно.

Вот пример, правда на C#:
Код: Выделить всё
    public static IList<Award> GetAllAwardsOfUser(int UserId)
    {
      List<Award> Result = new List<Award>();

      using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["UsersAwards"].ConnectionString))
      {
        SqlCommand cmd = new SqlCommand()
        {
          CommandText = "select [Id], [Text] from [Awards] where [UserId]=@user",
          Connection = con
        };
        cmd.Parameters.AddWithValue("@user", UserId);

        con.Open();
        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
          Result.Add(new Award((int)reader["Id"], (String)reader["Text"], UserId));
      }

      return Result;
    }

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 08.09.2012 (Сб) 22:14

Qwertiy писал(а):
Anta писал(а):на vb в visual studio 12

Ну и нечего тогда строку запроса конкатенацией строить. Есть же класс SqlCommand, который сам подставляет параметры и делает это именно так, как нужно.

спасибо попробую разобраться, у меня значение для выборки нужно задавать динамично(вывожу на формы в разнык контролы результаты запросов, а потом пользователь делает другие манипуляции), то есть администратор подключается как админ к БД, выбираю схему и обращается к таблицам, так как в каждой схеме присутствуют таблицы с одинаковыми именами ( специфика БД, разрабатывается для обработки картографических данных, для работы в автокад, то есть рисуем и тп в автокаде, в сотни разных городов и вся информация хранится в БД Оракл), возможно мой подход неправильный?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 08.09.2012 (Сб) 22:22

В твоём подходе я так и не разобрался. Просто говорю, что надо использовать специализированный класс, который гарантированно помещает в базу данные именно так как надо и не допускает SQL-injection.

И вообще, не люблю судить о правильности подхода, если не очевидно, что он абсолютно неверный.
Когда что-то пишу что-то интерексное для себя, часто получается большая гора магических эвристик.

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 10.09.2012 (Пн) 1:24

Qwertiy писал(а):В твоём подходе я так и не разобрался. Просто говорю, что надо использовать специализированный класс, который гарантированно помещает в базу данные именно так как надо и не допускает SQL-injection..
разработчик БД Оракл поставил задание, разработать для него программу, которая подключает его к трем БД как администратора (список выбора БД-первый этап)( упомянул о том, что для него не вопрос , что логин и пасс прописанны прямо в коде (упс) .То есть для начала выбрать БД и подключяемся, потом выпадает список схем (только те, котрые он создал для работы с данными), потом, на основании имени выбранной схемы, он будет осуществлять операции с 2-3 мя таблицами (изменение, добавление данных), эти данные служат параметрами для других таблиц, для работы в автокаде. Вот поэтому в моих запросах присутсвуют обращения к контролам.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: vb и Oracle: подключение, изменение данных

Сообщение HandKot » 10.09.2012 (Пн) 7:10

Anta писал(а):Sqlstr= “Select first name from table1 where name=” ’ “+combobox1.text+ “ ’ “,
Где значение combobox1.text может быть равно О’Хенри, на данный момент запрос обрывается на апострофе после первой буквы О в фамилии

как-то так
Код: Выделить всё
Sqlstr= “Select first name from table1 where name=” ’ “+Replace(combobox1.text, "'", "''")+ “ ’ “,"


Anta писал(а):эээ, есть вот такие фамилии-латинскими буквами: Pagé, André, Noël

тут, думаю, проблема в контролах
сам не сталкивался, но вероятно, надо выбирать такие контролы, которые могут поддерживать данный шрифт
I Have Nine Lives You Have One Only
THINK!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.09.2012 (Пн) 7:30

HandKot писал(а):как-то так

"Как-то так" не надо. Надо через SqlCommand!
Код: Выделить всё
Dim Cmd As New SqlCommand
With Cmd
  .CommandText = "Select first name from table1 where name=@name"
  .Connection = Con
  .Parameters.AddWithValue("@name", combobox1.text);
End With

HandKot писал(а):тут, думаю, проблема в контролах

Стандартные контролы замечательно работают с юникодом. Проблема с базой.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: vb и Oracle: подключение, изменение данных

Сообщение HandKot » 10.09.2012 (Пн) 8:06

Qwertiy писал(а):Надо через SqlCommand!

согласен, но беря во внимание
Anta писал(а):потом, на основании имени выбранной схемы, он будет осуществлять операции с 2-3 мя таблицами (изменение, добавление данных)

иногда проще создавать запрос динамически. А учитывая, что работать должен админ (по просьбе которого и разрабатывается прога), то sql-инъекций, можно не опасаться, главное, чтобы прога не "уплыла" в "злобные" руки :)
I Have Nine Lives You Have One Only
THINK!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.09.2012 (Пн) 15:33

HandKot писал(а):согласен, но беря во внимание

Зачем делать сложно и сомнительно, когда можно легко и правильно?

HandKot писал(а):иногда проще создавать запрос динамически

Ну а у меня он как создаётся?

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 11.09.2012 (Вт) 1:41

Qwertiy писал(а):
HandKot писал(а):как-то так

"Как-то так" не надо. Надо через SqlCommand!
спасибо, попробую этот вариант!
HandKot писал(а):тут, думаю, проблема в контролах

Стандартные контролы замечательно работают с юникодом. Проблема с базой.

Результат запроса вывожу в listbox, какого рода может быть проблема с базой? в базе все результаты запросов коректны...может нужно какое-то форматирования текста -результата в VB?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: vb и Oracle: подключение, изменение данных

Сообщение HandKot » 11.09.2012 (Вт) 6:53

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

и по-поводу кодировки, возможно проблема в дровах
ЗЫЖ тут недавно участвовал в подобнгой теме, при получении русских символов, возвращались вопросительные знаки, помогло только использование другого драйвера
I Have Nine Lives You Have One Only
THINK!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.09.2012 (Вт) 7:43

Поставь в коде breakpoint и посмотри, что считываешь из базы.

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 13.09.2012 (Чт) 3:07

Подскажите, а каким образом можно передать значение строки подключения в другое предложение, есть небольшое приложение, которое тоже на VB net, в котором строка подключения прописана в коде, и как прописать корректно путь к этому второму приложению, если оно сейчас находится на d:\programms, а вдруг программа окажется не в этой дирриктории, скажем при переносе на другой компьютер? Или если создать файл инсталяции,где нужно прописать какой-то путь и только по этому пути прописать второе преложение? Для вызова использовать Shell?
Спасибо.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.09.2012 (Чт) 7:50

Anta писал(а):Подскажите, а каким образом можно передать значение строки подключения в другое предложение

Именно из одного приложения в другое?
При запуске - через командную строку.
Во время работы, если второе приложение оконное, то через WinApi.
Ещё, можно использовать каналы для взаимоденйствия.
А можно положить строку подключения в файл конфигурации.

Anta писал(а):как прописать корректно путь к этому второму приложению

Хранить его в настройках, или указать относительный путь, если это возможно.

Anta писал(а):Для вызова использовать Shell?

Это возможно, но лучше использовать класс Process, например Process.Start(Program, Args).

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 13.09.2012 (Чт) 14:12

спасибо

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 16.09.2012 (Вс) 18:01

Подскажите, в таблице Оракл есть несколько столбцов, где значение либо 0(неверно), либо 1(верно) - БД оракл не поддерживает булеан, поэтому было решено импользовать int (0 или 1) и колонка с датами, возможно ли в datagridview отобразить значения 0 как checkbox-false и 1-checkbox-true прямо в datagrid и чтоб в колонке с датами отображались даты из таблицы бд и при нажатии на дату выпадал бы календарь с возможностью изменть дату или добавить дату для пустых значений полей, чтоб потом вернуть данные в БД? Спасибо

Anta
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 106
Зарегистрирован: 19.08.2012 (Вс) 22:00

Re: vb и Oracle: подключение, изменение данных

Сообщение Anta » 16.09.2012 (Вс) 18:11

Забыла уточнить, datagridview подключается к таблице через код программы,в таблице 17 столбцов, значения 1,0 содержаться в столбцах 4, 6, 17, а даты в столбцах 3,5,16


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

    TopList