Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  05:28[Войти] | [Зарегистрироваться]
Ответ на вопрос № 52511

02-06-2007 02:27
Передаю данные из Екселя в МССКЛ:

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'

Что не так делаю?

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

06-06-2007 09:30 | Сообщение от автора вопроса
Noskov
Спасибо, но я уже на СКЛ написал парсинг, вроде все работает )
Если кому будет интересно, пишите на почту дам код...

05-06-2007 09:44
Примерно так:

S:='Директор Иванов Иван Иванович';
P:=Pos(' ', S);
if P <> 0 then begin
  Dolgnost:=LeftStr(S, P-1);
  S:=RightStr(S, length(S) - P);
  P:=Pos(' ', S);
  if P <> 0 then begin
    Familia:=LeftStr(S, P-1);
    S:=RightStr(S, length(S) - P);
  //... и т.д.
end;


Но со строкой 'Генеральный директор Филиппов А.В' это не пройдет.

05-06-2007 09:15
А можно напримере это паказать...
Вот Ексель файл в базе у меня так же все:
http://cp.liveofan.jino-net.ru./Excel.rar

04-06-2007 13:44 | Комментарий к предыдущим ответам
Но если сотрудника зовут, например, Усама бен Мухаммед бен Авад бен Ладен (клички «Моджахед», «Абу-Абдалла», «Хадж», «Директор» - распарсировка работать не будет :)
Да и должности тоже интересные бывают (Главный государственный инспектор по пожарному надзору). А про адреса я вообще молчу... :)

04-06-2007 08:45
осталось разобраться с распарсировкой...

Если известно, что данные разделены пробелом, то функции Pos, PosEx.

Но если сотрудника зовут, например, Усама бен Мухаммед бен Авад бен Ладен (клички «Моджахед», «Абу-Абдалла», «Хадж», «Директор» - распарсировка работать не будет :)

02-06-2007 22:12
Так с очисткой разобрался, осталось разобраться с распарсировкой, пжлст если кто знает дайте пример распарсировки следующего выражения
В таблице есть строка Сотрудник вида:
Директор Иванов Иван Иванович
Можно ли "легким движением руки" встваить ее в эту же таблицу, чтобы получилось следующее (т.е. несколько записей)

Должность        Фамилия        Имя          Отчество
----------        -------        ----          ---------
Директор Иванов Иван Иванович

Кроме этой строки в таблице еще много других строк, которые тоже требуют распарсировки:
Таблица с полями: Название, Сотрудник, Адрес
Все требуют распарсировки...
P.S.
Значения импортированны из екселя, потому про приведение ко 2нф не пишете...



02-06-2007 11:24
Все с этим разобрался, теперь работает в одну таблицу пихает все

ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add("Insert into perev (Название_орг, Договор, Сотрудники, Адрес, Телефон, Наименование, Срок_работ, Условие) 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[0]->Value;
ADOQuery2->Parameters->ParamByName("dog")->Value=ADOQuery1->Fields->Fields[1]->Value;
ADOQuery2->Parameters->ParamByName("sotrud")->Value=ADOQuery1->Fields->Fields[2]->Value;
ADOQuery2->Parameters->ParamByName("adres")->Value=ADOQuery1->Fields->Fields[3]->Value;
ADOQuery2->Parameters->ParamByName("tel")->Value=ADOQuery1->Fields->Fields[4]->Value;
ADOQuery2->Parameters->ParamByName("naimen")->Value=ADOQuery1->Fields->Fields[5]->Value;
ADOQuery2->Parameters->ParamByName("srok")->Value=ADOQuery1->Fields->Fields[6]->Value;
ADOQuery2->Parameters->ParamByName("usl")->Value=ADOQuery1->Fields->Fields[7]->Value;


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



Теперь возникло 2 новых вопроса:
1)Мне нужно, чтобы в случае если поля уже заполнены, таже самая информация не вводилась, как это сделать?
2)Необходимо теперь распарсить строки, т.е. у меня в одной ячейке хранится 2 значения через отделенные в
1 случае пробелом
2 случае частицей от
3 случае дефисом
Нужно разбить эту ячейку на 2

02-06-2007 06:48
ADOQuery1->Active = true;
Я запускаю при открытии формы, все данные из екселя выгружаются в DBGrid нормально, теперь мне необходимо из подключенного Экселя выгрузить данные на сервер в созданную таблицу...
Если убираю строку
ADOQuery2->Active = true;
Выдает следующее ADOQuery2 Parametr @org not found

02-06-2007 03:14
Убери строку ADOQuery2->Active = true;
Или может быть надо ADOQuery1->Active = true; ?

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Два кольца, два конца, посередине гвоздик.
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования