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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 12:20   #11
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
яндекс рулит
http://www.sql.ru/forum/actualthread.aspx?tid=903533
тут выборка... но переделать во вставку не проблема...
Но это придется делать 1с программисту. Не прокатит. Долго разбираться будет. Я могу попросит в какой файл выгрузить из 1с (txt, xls, dbf). И дальше работать с этим файлом из delphi. Экспортировать из этого файла в access. Вот какая задача сейчас стоит. Я не знаю какой файл использовать лучше. И пример кода экспорта с 3-мя полями меня бы спас наверно. Я пробовал напрямую подключаться к dbf, но поиск (фулскан) не заработал. Подозреваю, что трабл в кодировке имен полей в dbf. Об этом я писал выше.

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

Остановился на xls. Осталось организовать экспорт в access. Подскажите пожалуйста.

Последний раз редактировалось Stilet; 16.12.2012 в 12:25.
Kerby666 вне форума Ответить с цитированием
Старый 12.12.2012, 13:21   #12
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

dbf лучше в данном случае

http://www.sql.ru/forum/actualthread.aspx?tid=401025

CurrentDb.Execute "SELECT * INTO имя_таблицы FROM имя_файла_dbf IN 'C:\Temp' 'dBase IV;'"

хотя эксеть тоже катит

http://forum.sources.ru/index.php?showtopic=300837&hl=
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 12.12.2012 в 13:24.
Slym вне форума Ответить с цитированием
Старый 12.12.2012, 13:57   #13
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
dbf лучше в данном случае

http://www.sql.ru/forum/actualthread.aspx?tid=401025

CurrentDb.Execute "SELECT * INTO имя_таблицы FROM имя_файла_dbf IN 'C:\Temp' 'dBase IV;'"

хотя эксеть тоже катит

http://forum.sources.ru/index.php?showtopic=300837&hl=
Про dbf это точно было бы лучше. Я могу прямо к таблице подключиться. Только проблемка, поиск перестает работать. А так идеальный вариант. Я писал об этом уже тоже.

Разобрался с dbf. Все четко. Теперь осталось решить вопрос с монопольным доступом. Во время выполнения delphi приложения, монопольного доступа к файлу dbf 1с не получит. Соответственно надо организовать копирование из выходного файла 1с.dbf в delphi.dbf. Есть какой-нибудь sql запрос на это или придется таблицы фулсканом проходить?? И в идеале вожможно ли копировать не все подряд, а только записи с изменившимися полями?


P.S. Копирование наладил так сказать. Подскажите как быстро очистить таблицу dbf полностью??

Цитата:
Сообщение от Slym Посмотреть сообщение
Это копец... поиск методом Фулскан строк на стороне клиента...
Запросы не учили? Если поле Barcode будет индексировано - то запросом на порядки быстрее.
SELECT * FROM TableName WHERE barcode= MyBarCode;
АА! Это конец. Поиск медленне некуда (фулсканом). помогите переписать тот кусочек кода под sql.

Код:
Select *
From base //название моей таблицы dbf
There code = Barcode// здесь code - имя поля barcode - с чем сравниваю
Не работает - ошибка - command contains unrecognized phrase/keyword

вот тот кусочек кода
Код:
function TForm1.ItemByBarcode(const Barcode: string;
  var Item: TBarcodeItem): Boolean;
begin
  Result := False;
  AdoTable1.First;
  while not ADOTAble1.Eof do
  begin
    Result := AdoTable1.FieldByName('code').AsString = Barcode;
    if Result then
    begin
      Item.Line1 := ADOTable1.FieldByName('Line1').Value;
      Item.Line2 := ADOTable1.FieldByName('Line2').Value;
      Break;
    end;
    ADOTable1.Next;
  end;
end;

Последний раз редактировалось Stilet; 16.12.2012 в 12:30.
Kerby666 вне форума Ответить с цитированием
Старый 12.12.2012, 18:42   #14
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

1. Зачем вообще монопольный доступ? ты хочешь читать пока 1С пишет? это потенциальные грабли...
2. зачем тебе указанный поиск при импорте?
Код:
function ItemByBarcode(const Barcode: string; var Item: TBarcodeItem): Boolean;
begin
  //для быстродействия предварительно обеспечить индекс по code и
  //ADOQuery1.SQL.Text:='SELECT Line1, Line2 FROM Table WHERE code= :Barcode;'
  //ADOQuery1.Prepared:=true;
  //ADOQuery1.Active:=true;
  ADOQuery1.Parameters[0].Value:=Barcode;
  ADOQuery1.Requery();
  Result:=not ADOQuery1.IsEmpty;
  if Result then
  begin
    Item.Line1 := ADOQuery1.FieldByName('Line1').Value;
    Item.Line2 := ADOQuery1.FieldByName('Line2').Value;
  end;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 12.12.2012, 19:08   #15
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
1. Зачем вообще монопольный доступ? ты хочешь читать пока 1С пишет? это потенциальные грабли...
2. зачем тебе указанный поиск при импорте?
Во всем этом замешан сканер, который по нажатию кнопки посылает данные в программу (Barcode). Происходит просмотр dbf на наличие такого же штрих-кода (сode). Соответственно изменять данные в dbf на лету я не могу, так как файл постоянно занят. Но по кнопке могу скопировать данные из 1с'ского dbf в свой. Вот зачем импорт. А так как база большая поиск очень медленный. До кучи я с dbf никогда не работал раньше и индексы создавать не умею. А надо уже к утру.
Kerby666 вне форума Ответить с цитированием
Старый 12.12.2012, 19:18   #16
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

в ацессе в таблице поле индексированным сделай...
твоя задача считать код сканера и быстро найти товар?
и для скорости ты хочешь использовать локальную не зависимую от 1C базу например mdb?
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 12.12.2012, 19:26   #17
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
в ацессе в таблице поле индексированным сделай...
твоя задача считать код сканера и быстро найти товар?
и для скорости ты хочешь использовать локальную не зависимую от 1C базу например mdb?
Все так.
Я же с этого и начал, только базу нужно наполнить данными же. Теперь у меня вариант только из dbf экспортировать в access.

Код:
function TForm1.ItemByBarcode(const Barcode: string;
  var Item: TBarcodeItem): Boolean;
begin
  //для быстродействия предварительно обеспечить индекс по code и
  ADOQuery1.SQL.Text:='SELECT Line1, Line2 FROM Base WHERE code = Barcode';
  ADOQuery1.Prepared:=true;
  ADOQuery1.Active:=true;
  ADOQuery1.Parameters[0].Value:= 'Barcode';
  ADOQuery1.Requery();
  Result:=not ADOQuery1.IsEmpty;
  if Result then
  begin
    Item.Line1 := ADOQuery1.FieldByName('Line1').Value;
    Item.Line2 := ADOQuery1.FieldByName('Line2').Value;
  end;
end;
Я код немного подправил. Пишет, что поле 'BARCODE' не найдено.
на эту строку конкретно ADOQuery1.Parameters[0].Value:=
При чем не важно, что я пишу после присвоить значение (в апострофах или без, code или barcode)

Последний раз редактировалось Stilet; 16.12.2012 в 12:32.
Kerby666 вне форума Ответить с цитированием
Старый 12.12.2012, 20:24   #18
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

по-моему ошибка:
Код:
  ADOQuery1.SQL.Text:='SELECT Line1, Line2 FROM Base WHERE code = :Barcode';
  ADOQuery1.Prepared:=true;
  ADOQuery1.Active:=true;
  ADOQuery1.Parameters.ParamByName('Barcode').Value:= 'Barcode';

как то так

p.s. для быстрой очистки, если таблица только Твоя, то просто удали ее, а потом заново создай, правда не знаю насколько это правильное решение...
я примерно так делал когда-то:
Код:
    with dm.DbfQuery do  
    begin

      if (FileExists('myfile.dbf')) then
      begin
        Close;
        Sql.Clear;
        Sql.Text := 'Drop table myfile';
        ExecSql;
      end ;

      Close;
      SQL.Clear;
      SQL.Text := 'Create table myfile ' +
                  '(id_ integer, name_ char(40), type_ char(50),date_ date );';
      ExecSql;   
  end;

Последний раз редактировалось maLoy*508; 12.12.2012 в 20:32.
maLoy*508 вне форума Ответить с цитированием
Старый 12.12.2012, 20:36   #19
Kerby666
Пользователь
 
Регистрация: 10.12.2012
Сообщений: 64
По умолчанию

Цитата:
Сообщение от maLoy*508 Посмотреть сообщение
по-моему ошибка:
Код:
  ADOQuery1.SQL.Text:='SELECT Line1, Line2 FROM Base WHERE code = :Barcode';
  ADOQuery1.Prepared:=true;
  ADOQuery1.Active:=true;
  ADOQuery1.Parameters.ParamByName('Barcode').Value:= 'Barcode';

как то так

p.s. для быстрой очистки, если таблица только Твоя, то просто удали ее, а потом заново создай, правда не знаю насколько это правильное решение...
я примерно так делал когда-то:
Код:
    with dm.DbfQuery do  
    begin

      if (FileExists('myfile.dbf')) then
      begin
        Close;
        Sql.Clear;
        Sql.Text := 'Drop table myfile';
        ExecSql;
      end ;

      Close;
      SQL.Clear;
      SQL.Text := 'Create table myfile ' +
                  '(id_ integer, name_ char(40), type_ char(50),date_ date );';
      ExecSql;   
  end;
Говорит что неправильно определен объект параметр. Голова кипит уже
Kerby666 вне форума Ответить с цитированием
Старый 12.12.2012, 20:38   #20
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Нельзя активировать ADOQuery1 до присвоения значений параметров запроса.
ReportCube вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт данных из Access в Word, C# Miaka Помощь студентам 0 09.05.2012 17:32
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38
экспорт данных из access в существующие файлы word и excel Margaret Microsoft Office Access 4 10.12.2010 15:44
Экспорт данных из SQL Server в Access Daniar БД в Delphi 0 02.12.2010 17:56