Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заполнить поле одной таблицы из другой - перенести данные


Страницы:   1 2

Дмитрий ©   (2008-08-13 14:58:00) 

Здравствуйте!
Задача такая. Необходимо создать таблицу типа
Номер        |   Абонент
тип char 8  |  тип char 50

поля Номер должны заполнятся из результата выборки sql запроса к локальной таблице dbf
запрос типа
SELECT NUMER from "database.dbf" group by NUMER order by NUMER
в результате этого формируется список номеров, который надо теперь передать в созданную таблицу.
Поле абонент необходимо заполнить для каждого номера - Абонентская установка.
Для выборки SQL использую компонент query
_____________________________________________
какие будут советы и предложения для решения этой задачи
я не силен в знании о возможностях Delphi и SQL не удивлюсь если задача решается элементарно.

Жду ответов


ChaosAD   (2008-08-27 18:17:00) [1]

точнее не почему, а зачем????


ChaosAD   (2008-08-27 18:16:00) [2]

обычная операция копирования, но почему так много кода?
select далее insert, при соответствии полей короче не придумаешь. Можно конечно сначала delete или drop с последующим созданием таблицы, тоже через Query.


Дмитрий   (2008-08-14 23:33:00) [3]

Ура заработало...
Вот какое решение я нашел...

создал функцию
procedure TFORM3.TTableRecordCopy(Source, Destination: TTable);

var
i, lCount: Integer;
begin
lCount:=Source.RecordCount;
for i:=1 to lCount do
begin
Destination.Insert;
Destination.FieldByName('NEBST').AsString:=Source.FieldByName('NEBST').AsString;
Destination.FieldByName('NAME').AsString:='Абонентская установка:';
Destination.Post;
Source.Next;
end;
end;

потом обработчике кнопки следующий код

procedure TForm3.Button2Click(Sender: TObject);
var
count,i: integer;
begin
if opend.Execute then
begin
Query2.Close;
Query2.SQL.Clear;
database:=Opend.FileName;
Query2.SQL.Add('SELECT NEBST from '+'"'+database+'"'+' group by NEBST order by NEBST');
Query2.Open;
DbiMakePermanent(query2.Handle, 'temp_db.dbf',true);
count:=query2.RecordCount;
label3.Caption:=inttostr(count);
query2.Close;
query2.SQL.Clear;
if fileexists('temporary.dbf') then DeleteFile('temporary.dbf');
table1.TableName:='temporary.dbf';
table1.FieldDefs.Add('NEBST',ftString,8,false);
table1.FieldDefs.Add('NAME',ftstring,50,false);
table1.CreateTable;
table1.Open;
table2.TableName:='temp_db.dbf';
table2.Open;
TTableRecordCopy(table2,table1);
end;
end;


Дмитрий   (2008-08-14 19:52:00) [4]

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


Дмитрий   (2008-08-14 19:47:00) [5]

Юрий Зотов
Спасибо...
я уже думал об этом создал таблицу в аккесе...
тока не додумал как туда закинуть данные...
этот запрос в query надеюсь можно выполнить...


Юрий Зотов   (2008-08-14 15:25:00) [6]

Создать пустую TABLE2, а затем в любой подходящей тулзе проиграть вот этот скрипт:

insert into TABLE2
 (NUMBER, ABONENT)
 (select NUMBER, 'Абонентская установка' from TABLE1)


Anatoly Podgoretsky   (2008-08-14 10:32:00) [7]

> Плохиш  (14.08.2008 10:14:21)  [21]

Ну тогда и "может"


Плохиш   (2008-08-14 10:14:00) [8]


> Сергей М. ©   (13.08.08 21:05) [19]

Знак вопроса лишний.


Sergey13   (2008-08-14 08:26:00) [9]

> [11] Дмитрий   (13.08.08 17:40)
> смысл ее создать таблицу (номер-имя абонента) которую будет
> использовать программа при формировании отчетов

А зачем ее вообще создавать?

> поля Номер должны заполнятся из результата выборки sql запроса
> к локальной таблице dbf

Почему недостаточно просто выполнить запрос
SELECT distinct NUMER from "database.dbf" order by NUMER
и работать с полученным датасетом?


Сергей М.   (2008-08-13 21:05:00) [10]


> Дмитрий   (13.08.08 18:02) [18]


Может лучше нанять программиста ?


Дмитрий   (2008-08-13 18:02:00) [11]

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

if opend.Execute then
begin
Query2.Close;
Query2.SQL.Clear;
database:=Opend.FileName;
Query2.SQL.Add('SELECT NEBST from '+'"'+database+'"'+' group by NEBST order by NEBST');
Query2.Open;
DbiMakePermanent(query2.Handle, 'temp_db.dbf',true);

count:=Query2.RecordCount;
with table1 do
begin
Active := False;
// DatabaseName := 'NUM';
TableType := ttDBase;
TableName := 'numandname';
  if not Table1.Exists then begin
  with FieldDefs do begin
    Clear;
    with AddFieldDef do begin
       Name := 'NEBST';
      DataType := ftString;
      Size:=8;
      Required := True;
    end;
    with AddFieldDef do begin

      Name := 'NAME';
      DataType := ftString;
      Size := 30;
    end;
  end;
  end;
end;

end;


Дмитрий   (2008-08-13 17:56:00) [12]

Medbe}I{onok XML
это таблица из теледата, из этой таблицы формируется список номеров...


Дмитрий   (2008-08-13 17:54:00) [13]

Medbe}I{onok XML )) да верю я...
а как table познакомить с базой то...в BDE ковырять...или где...
подскажите пожалуйста


Medbe}I{onok XML   (2008-08-13 17:52:00) [14]

Query2.SQL.Clear;
database:=Opend.FileName;
Query2.SQL.Add('SELECT NEBST from '+'"'+database+'"'+' group by NEBST order by NEBST');
Query2.Open;

Жирным это что такое?


Дмитрий   (2008-08-13 17:51:00) [15]

СУБД локальная база через BDE dBASE
нашел вот такой код
procedure TTableRecordCopy(Source, Destination: TTable);

{ПРЕДПОЛОЖЕНИЕ: Обе таблицы имеют курсор в нужной строке и
компоненты Table ссылаются на таблицы с совместимыми величинами.}
var
i, lCount: Integer;
begin
lCount := Source.FieldCount;
for i := 0 to lCount - 1 do
if (not Source.Fields[i].IsNull) and (Source.Fields[i].CanModify) then
Destination.FieldByName(Source.Fields[i].FieldName).Assign(Source.Fields[i]);
end;

теперь как бы его применить...
два компонента table надо проинициализировать...
создать с помощью table таблицу пока не получается...
буду пробовать потом отпишусь что получилось


Medbe}I{onok XML   (2008-08-13 17:50:00) [16]

выдает ошибку unknown database.

А ты поверь в это


stas   (2008-08-13 17:46:00) [17]

Дмитрий   (13.08.08 17:40) [11]

ниче непонял...

Ищите
Insert Into, Update, Select Into  и гетерогенные запросы

Для того чтобы вам ответить как это сделать нужно знать СУБД.


Дмитрий   (2008-08-13 17:40:00) [18]

Сергей М. Вы наверно не совсем поняли задачу...
вопрос по сабжу это однократная операция...
смысл ее создать таблицу (номер-имя абонента) которую будет использовать программа при формировании отчетов...т.е. каждому номеру будет соответсвовать имя абонентской установки...
хочется реализовать эту возможность в средствах программы...
допустим изменился нумерационный план или при переносе программы на другой сервер тарификации чтобы средствами программы можно было бы заново создать таблицу номер-абонент в которой будут внесены номера из таблицы которую дал экспорт из теледата. а значения имя абонетской усьановки при создании таблицы было бы для всех полей - "абонентская установка"...в программе так же реализуется возможность редактировать значение имя абонентской установки по введеному номеру.
таблица которую выдает теледата не содержит имя абонентской установки...
кроме того теледата предоставляет очень скудные средства для поиска информации...поэтому появилась необходимость в дополнительном средстве для поиска и формирования отчетов. По поиску из экспортируемой таблицы вопросов нет...эта часть программы практически готова...
теперь необходимо создать таблицу номер- абонент
и применять sql запрос объединения результата поиска и требуемой таблицы...что бы получить человекообразный отчет...
абонент|номер|***|время разговора
который будет экспортироватся в экс


stas   (2008-08-13 17:08:00) [19]

Если это MSSQL у него есть импорт/экспорт.


Сергей М.   (2008-08-13 16:49:00) [20]


> программу писать надо


> имеем экспорт из теледата


Программа подразумевает многократное ее использование, в т.ч. реализованной в ней функциональности импорта/экспорта.

И в то же время ты утверждаешь, что импорт/экспорт - это однократная операция.

Сложно понять тебя, Саид)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо