Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 00:32 02.07.24 
Компютри и Интернет
   >> Delphi
*Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема Програмно добавяне на поле в съществуваща 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 компонент) ще трябва да си добавиш и новата колона. Ако не си - когато таблицата се отвори ще имаш достъп до колонката.
Надявам се да съм те разбрал правилно! Пиши после дали се е получило! Успех!



Тема Благодарянови [re: andrew_nikoloff]  
АвторAda (Нерегистриран)
Публикувано01.11.07 11:18



Благодаря, получи се.
Като си помисля колко време се мотах, а като опря ножа до кокала, се справих за 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.



Тема Зависи от базатанови [re: NikB]  
Автор andrew_nikoloff (bugbuster)
Публикувано02.11.07 12:48



Не мисля, че има стандартен начин това да се провери с SQL. А иначе по принцип може, но това зависи от базата, която е отдолу. Например за MS SQL Server има таблици sysobjects и syscolumns, а при Firebird/Interbase има RDB$RELATIONS и RDB$FIELDS. А през API това може да се получи от Database или еквивалентния компонент - например GetFieldNames и GetTableNames на TIBDatabase.



Тема Да, за MSSQL и MySQL има SQL заявкинови [re: andrew_nikoloff]  
Автор NikB (любопитен)
Публикувано02.11.07 12:50



Да, за MSSQL и MySQL има SQL заявки.
Но мислех, че има и за парадокс и просто не съм го научил :)



Тема BDE APIнови [re: NikB]  
Автор andrew_nikoloff (bugbuster)
Публикувано02.11.07 13:22



През API-то на BDE трябва да има начин. Просто не го знам обаче. Трябва да се чете как става...





Тема Няма да е по-лесен от tQueryнови [re: andrew_nikoloff]  
Автор NikB (любопитен)
Публикувано02.11.07 14:18



Опитът ми показва, че през 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



Няма пълно щастие.
Но все пак има решение.




Страници по тази тема: 1 | 2 | >> (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.