Тема
|
Програмно добавяне на поле в съществуваща TTable
|
|
Автор | Ada (Нерегистриран) |
Публикувано | 15.03.05 13:38 |
|
Как мога програмно да добавя поле към вече съществуваща таблица (Paradox, TTable, Delphi5)?
Опитах с table1.FieldDefs.AddFieldDef, но не става (пък и в Help-а пише, че не става).
Пробвах и table1.fields.add (макар, че пише да не са прави). Пак не става.
А не ми се струва здравословно да дам възможност на клиентите си да бърнират директно в таблиците
|
|
Тема
|
Re: Съжалвяам, сбърках иконката
[re: Ada]
|
|
Автор | Ada (Нерегистриран) |
Публикувано | 15.03.05 13:43 |
|
Съжалвяам, сбърках иконката. Би трябвало да е питанка. Какъв ли медал да дам?
|
|
Тема
|
Re: Програмно добавяне на поле в съществуваща TTab
[re: Ada]
|
|
Автор |
andrew_nikoloff (bugbuster) |
Публикувано | 15.03.05 13:55 |
|
Ако съм те разбрал правилно искаш да добавиш колона в самата таблица в paradox-а? Най-лено можеш да го направиш с SQL заявка. Сложи си едно Query и му напиши за SQL нещо от сорта на ALTER TABLE [име_на_таблица] ADD [име_на_колона] [тип]. Например:
ALTER TABLE COUNTRY ADD CAPITAL VARCHAR(25)
ALTER TABLE COUNTRY ADD POPULATION INTEGER
После ако си си добавила design time фийловете в таблицата (вече конкретния TTable компонент) ще трябва да си добавиш и новата колона. Ако не си - когато таблицата се отвори ще имаш достъп до колонката.
Надявам се да съм те разбрал правилно! Пиши после дали се е получило! Успех!
|
|
|
Благодаря, получи се.
Като си помисля колко време се мотах, а като опря ножа до кокала, се справих за 20-тина минути...
SQL не хапел.
|
|
Тема
|
Re: Благодаря
[re: Ada]
|
|
Автор |
Formal (незнаещ) |
Публикувано | 01.11.07 14:03 |
|
Е, по-добре късно, отколкото никога.
(освен ако dir-а не е объркал пак датите)
|
|
Тема
|
A на тоя диалект на SQL как се разбира дали полето
[re: andrew_nikoloff]
|
|
Автор |
NikB (любопитен) |
Публикувано | 02.11.07 12:37 |
|
A на тоя диалект на SQL как се разбира дали полето съществува?
Щото аз си ги добавям рънтайм, но за да ги проверя дали е съществувало си правя заявка със селект (без да връща записи) и гледам дали съществува полето с FieldFind.
|
|
|
Не мисля, че има стандартен начин това да се провери с SQL. А иначе по принцип може, но това зависи от базата, която е отдолу. Например за MS SQL Server има таблици sysobjects и syscolumns, а при Firebird/Interbase има RDB$RELATIONS и RDB$FIELDS. А през API това може да се получи от Database или еквивалентния компонент - например GetFieldNames и GetTableNames на TIBDatabase.
|
|
|
Да, за MSSQL и MySQL има SQL заявки.
Но мислех, че има и за парадокс и просто не съм го научил :)
|
|
|
През API-то на BDE трябва да има начин. Просто не го знам обаче. Трябва да се чете как става...
|
|
|
Опитът ми показва, че през API на BDE Няма да е по-лесен от tQuery. :)
|
|
Тема
|
Re: A на тоя диалект на SQL как се разбира дали полето
[re: NikB]
|
|
Автор | Ada (Нерегистриран) |
Публикувано | 02.11.07 16:28 |
|
Мога да ти предложа два еднакво тромави (но работещи) начина.
Първи начин:
TForm1 = class(TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DataSource1.DataSet = Query1
DBGrid1.DataSource = DataSource1
procedure TForm1.FormCreate(Sender: TObject);
begin
StrList:=TstringList.Create;
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select * from парадокската таблица');
Query1.Prepare;
Query1.Open;
StrList.Clear;
for ii:=0 to DBGrid1.Columns.count-1 do
StrList.Add(DBGrid1.Columns[ii].Fieldname);
DBGrid1.visible:=false; // ако пречи
end;
добавяне на поле с име, присвоено на NewFieldName
ii:=0; stop:=false;
while ((ii< StrList.Count) and (not stop)) do
begin
stop:=AnsiSameText(StrList, NewFieldName);
if not stop then inc(ii);
end;
if not stop
then begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('ALTER TABLE парадокската таблица ADD '+ NewFieldName +' integer'); {примерно}
Query1.Prepare;
Query1.ExecSQL;
StrList.Add(Edit2.Text);
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('Select * from парадокската таблица ');
Query1.Prepare;
Query1.Open;
end;
Втори начин:
Имаш
Table1,Table2:TТable
Table1 – таблица, към която трябва да се добавят полета
Table2 – празна таблица с всички необходими полета
Проверява се кои полета от Table2 липсват в Table1 и се добавят.
А има и трети начин: опитваш се да добавиш полетата, ако вече ги има, се получава едно дълго съобщение за грешка, което май няма други лоши последствия, освен стряскане на този, който работи с програмата.
Може да има и други начини, но с моя мижав опит с SQL стигнах до тук.
|
|
Тема
|
Re: A на тоя диалект на SQL как се разбира дали по
[re: Ada]
|
|
Автор |
NikB (любопитен) |
Публикувано | 02.11.07 19:14 |
|
Каква е разликата?
Query1.Sql.Clear;
Query1.Sql.Add('Select * from парадокската таблица');
и
Query1.Sql.Text:='Select * from парадокската таблица';
Въпреки, че ако се добави и "where false" ще е малко по-ефективно
|
|
Тема
|
Сега обърнах внимание: FieldDefs.Add
[re: Ada]
|
|
Автор |
NikB (любопитен) |
Публикувано | 03.11.07 13:16 |
|
Сега обърнах внимание, че се оплакваш от FieldDefs.Add, а и ми се наложи да добавя едно попе. Може би това е един ефективен начин:
xTable := tTable.Create( Application.MainForm);
xTable.DataBaseName := '';
xTable.TableType := ttParadox;
xTable.TableName := xName; // пълния път до db файла
xTable.FieldDefs.Update; // чете съществуващите филдове
// това е с exception : if xTable.FieldDefs.Find( 'LStateGSM')=nil then begin
{ това не е с exception :Щ if xTable.FieldDefs.IndexOf( 'LStateGSM')>=0 then begin
xTable.FieldDefs.Add( 'LStateGSM', ftInteger, 0, false);
xTable.CreateTable;
end;
Редактирано от NikB на 03.11.07 13:22.
|
|
Тема
|
Re: Сега обърнах внимание: FieldDefs.Add
[re: NikB]
|
|
Автор | Ada (Нерегистриран) |
Публикувано | 05.11.07 11:37 |
|
Полето се добави, но се изтриха всички записи от xTable.
|
|
Тема
|
Значи FieldDefs.Add работи
[re: Ada]
|
|
Автор |
NikB (любопитен) |
Публикувано | 05.11.07 13:21 |
|
Значи FieldDefs.Add работи :)
За триенето - навярно CreateTable го предизвиква.
Много е неприятно.
|
|
Тема
|
Няма пълно щастие
[re: NikB]
|
|
Автор | Ada (Нерегистриран) |
Публикувано | 05.11.07 13:47 |
|
Няма пълно щастие.
Но все пак има решение.
|
|