• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Импорт из Excel в Mssql посредством С++builder

  • Автор темы Levi
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

Levi

Импорт из Excel в MSSQL посредством С++builder
Как реализовать?
 
L

LAW

Для доступа к Excel можно воспользоваться билдеровскими компонентом, либо создать объект через OLE. И первый и второй способы обсуждались здесь ранее. Ну а с укладкой взятых данных в MS SQL проблем быть не должно.
Если что пиши.

Удачи.
 
L

Levi

Через ОЛЕ объет это понятно, у меня другая проблема (
Нужно информацию которая в Екселе полностью занести в готовую БД
Строки из Екселя сгруппированы большей своей частью и поэтому не совпдают с существующими таблицами в БД, т.к. там строки разделенны на каждую таблицу отдельно (например в екселе в одно строке хранятся улица, дом, офис, а в БД улица, дом и офис это отдельные таблицы), поэтому надо как то запихнуть данные из Екселя в эти таблицы...
Даже без помощи Билдера, просто сделать Импорт, подскажите как это реализовать?
 
L

LAW

Через ОЛЕ объект это понятно, у меня другая проблема (
Вообще, по первончальному вопросу и не скажешь.

Строки из Екселя сгруппированы большей своей частью и поэтому не совпдают с существующими таблицами в БД,
Разбирать строки прийдётся значит. Если есть вменяемый разделитель, например запятая или поле фиксированной длинны, то разберётся, а иначе только словарём названий городов, улиц, только тут уже 100% точности разбора не добиться.
 
L

Levi

Все данные импортировал в СКЛ, через встроенный в него функцию Импорт...
Там сформировалась одна большая таблица со множеством значений...
Как теперь разделить Строки из Екселя на отдельные составляющие (сейчас там такое творится в одной строке хранятся улица, дом, офис, и занести их в необходимые таблицы, т.к в БД улица, дом и офис это отдельные таблицы...
Можно пример?
 
B

Barmutik

Вам же уже дал ответ на этот вопрос уважаемый LAW... сейчас вместо Экселя парсите значение поля в БД и разносите его на несколько полей в других таблицах... что конкретно у Вас вызывает проблемы ?
 
L

Levi

Как занести Идешники?
Допустим значения разбросал по таблицам, как их соединить ключами?
 
L

LAW

Структуру связей нужно строить при анализе записей Вашей выгрузки из Excel.
 
B

Barmutik

Ну предполагается что в таблицах у Вас есть уникальные ключи .. настройте между таблицами связи.. или ручками или с помощью SQL команд...
 
L

Levi

Еще вопрос, у меня очень много нулевых значений получается.
Например в Екселе хранится информация в одной ячейки:
Должность, ФИО, индекс, город, улица, дом, офис, тел1, тел2, сот_тел, факс, е-майл, ИНН, КПП, ОГРН, ОКПК
Так вот эти значения могут быть нулями в различном порядке: тел1, тел2, со_тел, факс, е-майл, ИНН, КПП, ОГРН.
Получается мне все нужно будет вручную делать? Автоматически нельзя будет реализовать?
 
L

Levi

Функция Дата Импорт в СКЛ - > Выбо моего Ексель документа - > Предоставил мне 1 таблицу со всеми значениями, которые необходимо нужно было выбрать - > Нажал кнопку импортировать
Что не так?
 
B

Barmutik

Судя по всему там просто все данные находятся в одном столбце и разделены сепараторами.. так что стандартный MS SQL импорт врядли поможет...
 
L

Levi

Barmutik
Именно так, вот пример моей базы и самого Ексель документа...
Что я не так делаю не пойму
Код:
http://cp.liveofan.jino-net.ru./SQL.rar
 
B

Barmutik

Ну .. формат очень легко разбираемый .. так что писать ручками парсер и загонят ьв БД .. работы на пару часов как максимум...

Стандартный импортировщик Вам тут не поможет...
 
B

Barmutik

Для: sax_ol

Ещё не факт что займёт боьлше времени .. подготовка данных и тесты что бы правильно загнались или написание парсера и загон по текущим данным :) :)
 
L

Levi

Это операция не одноразовая (
Я с таким не сталкивался ни разу, а препаду либо сами не знают, как делать либо просто не хотят помогать, по крайней мере, отнекиваются словами - это ваше задание и мы не можем вам ничем помочь...
Учитывая то что они мне это задание дали сами...
P.S.
И почему то другим студентам из моей группы, насколько я знаю, они помогли с их задачамми по Экспроту в Ворд и Эксель из их баз ...
Дайте наводку где искать...
Или опишите пошагово что мне необходимо сделать..если это неоднократная операция
Пример кода, если возможно...
 
L

Levi

Кстати то что у меня название таблиц и полей по русски, нормально отразится или лучше их переименовать на аглийском?
 
B

Barmutik

Ммм... а как Вы их исхитрились создать на русском в MS SQL? Насколько я в курсе это недопускается...
 
L

Levi

Все названия таблиц написанны на русском, это допускается...я вот боюсь не заругается ли Билдер
или Импорт?
Вот моя База
Код:
http://cp.liveofan.jino-net.ru./SQL.rar
-- старая версия
Код:
http://cp.liveofan.jino-net.ru./SQL1.rar
-- седня обновил ее, новая версия
 
L

Levi

Передаю данные из Екселя в МССКЛ:
Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("Insert into TexПер (Название_орг,Договор,Сотрудники,Адрес,Телефон,Наименование,Срок_работ,Услови
е) values (@org,@dog,@sotrud,@adres,@tel,@naimen,@srok,@usl)");
//AnsiString tmp_org="", tmp_dog="", tmp_sotrud="", tmp_adres="", tmp_tel="", tmp_naimen="", tmp_srok="", tmp_usl=""; //Здесь создаешь
//временные переменные для всех полей которые не должны быть(NB!!!)пустыми
ADOQuery2->Active = true;
while(!ADOQuery1->Eof){


ADOQuery2->Parameters->ParamByName("@org")->Value = ADOQuery1->Fields->Fields[1]->Value;
ADOQuery2->Parameters->ParamByName("@dog")->Value = ADOQuery1->Fields->Fields[2]->Value;
ADOQuery2->Parameters->ParamByName("@sotrud")->Value =ADOQuery1->Fields->Fields[3]->Value;
ADOQuery2->Parameters->ParamByName("@adres")->Value = ADOQuery1->Fields->Fields[4]->Value;
ADOQuery2->Parameters->ParamByName("@tel")->Value = ADOQuery1->Fields->Fields[5]->Value;
ADOQuery2->Parameters->ParamByName("@naimen")->Value =ADOQuery1->Fields->Fields[6]->Value;
ADOQuery2->Parameters->ParamByName("@srok")->Value =ADOQuery1->Fields->Fields[7]->Value;
ADOQuery2->Parameters->ParamByName("@usl")->Value =ADOQuery1->Fields->Fields[8]->Value;



ADOQuery2->ExecSQL();
ADOQuery1->Next(); }

Выдает ошибку при попытке импорта
must declare variable '@org'


Если же процедуру пишу в Базе
Код:
CREATE PROCEDURE DobavIm
@org varchar(50),
@dog varchar(50),
@sotrud varchar(50),
@adres varchar(50),
@tel varchar(50),
@naimen varchar(50),
@srok varchar(50),
@usl varchar(50)
AS
Insert into TexПер (Название_орг,Договор,Сотрудники,Адрес,Телефон,Наименование,Срок_работ,Услови
е) values (@org,@dog,@sotrud,@adres,@tel,@naimen,@srok,@usl)
GO

Код:
ADOQuery2->Active = true;
while(!ADOQuery1->Eof){


ADOQuery2->Parameters->ParamByName("@org")->Value = ADOQuery1->Fields->Fields[1]->Value;
ADOQuery2->Parameters->ParamByName("@dog")->Value = ADOQuery1->Fields->Fields[2]->Value;
ADOQuery2->Parameters->ParamByName("@sotrud")->Value =ADOQuery1->Fields->Fields[3]->Value;
ADOQuery2->Parameters->ParamByName("@adres")->Value = ADOQuery1->Fields->Fields[4]->Value;
ADOQuery2->Parameters->ParamByName("@tel")->Value = ADOQuery1->Fields->Fields[5]->Value;
ADOQuery2->Parameters->ParamByName("@naimen")->Value =ADOQuery1->Fields->Fields[6]->Value;
ADOQuery2->Parameters->ParamByName("@srok")->Value =ADOQuery1->Fields->Fields[7]->Value;
ADOQuery2->Parameters->ParamByName("@usl")->Value =ADOQuery1->Fields->Fields[8]->Value;



ADOQuery2->ExecSQL();
ADOQuery1->Next(); }

То выдает тоже самое must declare variable '@org'

Что не так делаю?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!