我正在使用的DBMS是MySQL,编程环境是Delphi 7(这个例子并不重要).
我有一个名为'subject'的表格,我将所有书籍主题存储在系统中.受试者可以有亲子关系,比如科学可以分为数学和物理,而数学可以细分为微积分,代数,几何和我们去.
我想要的是创建一个填充了该表中日期的树.拜托,帮帮我吧.它甚至与您用于说明目的的语言无关,它只是伪代码.
Subject表的数据库图如下所示:

Subject表定义:
DROP TABLE IF EXISTS subject;
CREATE TABLE IF NOT EXISTS subject ( # Comment
subject_id INT UNSIGNED NOT NULL AUTO_INCREMENT, # Subject ID
subject VARCHAR(25) NOT NULL, # Subject name
parent_id INT UNSIGNED NULL DEFAULT NULL, # Parent ID as seen from
PRIMARY KEY (subject_id), # the diagram refers to
UNIQUE (subject), # the subject_id field
INDEX (parent_id),
CONSTRAINT fk_subject_parent
FOREIGN KEY (parent_id)
REFERENCES subject (subject_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
) ENGINE=InnoDB …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi 7,我正在尝试以编程方式创建表单.这是我的表单类存根:
unit clsTStudentInfoForm;
interface
uses Forms;
type
TStudentInfoForm = class (TForm)
end;
implementation
end.
Run Code Online (Sandbox Code Playgroud)
我的主表单上还有一个按钮(这只是一个常规表单,应该在运行时创建并显示上面的表单),点击它时会创建并显示学生表单作为模态窗口.它确实显示了表格,但没有任何内容.您唯一能做的就是单击窗口右上角的关闭按钮将其关闭.
procedure TLibraryForm.btnShowStudentIfoFormClick(Sender: TObject);
var
f : TStudentInfoForm;
begin
f := TStudentInfoForm.CreateNew(Self);
f.ShowModal;
f.Free;
f := nil;
end;
Run Code Online (Sandbox Code Playgroud)

我不知道如何将组件添加到以编程方式创建的表单中(不是在运行时,而是在源代码中).你能帮我写一些代码,为学生表格添加一个好的按钮,并设置标题和表格的高度和宽度(代码必须写在学生表格文件中)?
任何建议和示例将受到高度赞赏.谢谢.
我的MySQL数据库中有3个表,它们具有以下结构:
书桌:
BOOK
---------------
book_id | title
---------------
1 | A
2 | B
Run Code Online (Sandbox Code Playgroud)
作者表:
AUTHOR
----------------
author_id | name
----------------
1 | John
2 | Bush
3 | Alex
4 | Bob
Run Code Online (Sandbox Code Playgroud)
然后我有一个联合表,它建立了表和作者之间的多对多关系,这意味着一本书可以由许多作者撰写(合着,即),作者可以有很多书或者他她写了.
BOOK_AUTHOR
--------------------
book_id | author_id
--------------------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 3
2 | 4
Run Code Online (Sandbox Code Playgroud)
是否可以通过SQL或MySQL使DBMS输出如下内容:
book_id | title | authors
------------------------------------------
1 | A | John, Bush, Alex, Bob
2 | B | Alex, Bob
Run Code Online (Sandbox Code Playgroud)
输出中的作者行是与特定书籍相关的所有作者的串联.
如何创建一个TComboBox,其中有两列隐藏了其中一列,以便它可以保存id值以及其中的实际项目?然后如何以编程方式获得该id值?
我正在使用 Delphi 7。
这是我的基类。函数load_for_edit()应该返回一个字符串数组,听起来就像这样。问题不是特别在这里,而是更进一步。
...
type
TStringArray = array of string;
...
function load_for_edit(): TStringArray;
...
numberOfFields: integer;
...
function TBaseForm.load_for_edit(): TStringArray;
var
query: TADOQuery;
i: integer;
begin
query := TADOQuery.Create(self);
query.Connection := DataModule1.ADOConnection;
query.SQL.Add('CALL get_' + self.table_name + '_id(' + self.id + ')');
query.Open;
numberOfFields := query.Fields.Count;
SetLength(result, query.Fields.Count);
for i := 0 to query.Fields.Count - 1 do
result[i] := query.Fields[i].Value.AsString;
end;
Run Code Online (Sandbox Code Playgroud)
接下来是基类的后代类,它尝试从基类的load_for_edit()函数接收数组。
...
type
TStringArray = array of string;
...
procedure TPublisherEditForm.FormShow(Sender: TObject);
var …Run Code Online (Sandbox Code Playgroud) 当然,这段代码不会编译.首先,我需要将一个TObject值转换为Integer.然后,将其作为字符串读取.我应该使用什么功能?
for i := 1 to 9 do begin
cmbLanguage.Items.AddObject(Format('Item %d', [i]), TObject(i));
end;
cmbLanguage.ItemIndex := 2;
ShowMessage(cmbLanguage.Items.Objects[cmbLanguage.ItemIndex]);
Run Code Online (Sandbox Code Playgroud)
或者也许首先可以使用String而不是Integer?
例如,我为我的表单编写了几个函数.现在,我需要另一种形式的完全相同的功能.那么,我如何在两种形式之间分享它们呢?如果可能的话,请提供一个简单的例子.
我正在使用Delphi 7.
假设我的表单上有页面控件.此页面控件有两个或三个选项卡.每个标签都有一些其他控件,如标签,编辑等.例如,如何获取代码中的编辑文本属性?
Delphi的版本是7.
我正在向MySQL数据库发送查询.可以返回的是一组数据行或只是一个空集.没什么不寻常的.但我不知道如何建立一个检查机制来检查它是一组数据还是一个空集.
这是一些代码:
var
Q: TADOQuery;
begin
Q := TADOQuery.Create(self);
Q.Connection := ADOConnection;
Q.SQL.Add('CALL get_shopping_cart_list()'); // Call stored procedure
Q.Open; // Send query and get some
// results back
// PSEUDOCODE
// IF get_shopping_cart_list() RETURNS A NON-EMPY SET THEN
// SHOW WHAT WE HAVE
// ELSE
// SHOW A MESSAGE THAT SAYS 'EMPTY SET'
Q.Free;
end;
Run Code Online (Sandbox Code Playgroud) 以下是我的数据库架构中的三个表:
\n\n-- Table where I store authors\nSELECT author_id, first_name, last_name FROM author;\n\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91 author_id \xe2\x95\x91 first_name \xe2\x95\x91 last_name \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 1 \xe2\x95\x91 Ernest \xe2\x95\x91 Hemingway \xe2\x95\x91\n\xe2\x95\x91 2 \xe2\x95\x91 Walt \xe2\x95\x91 Whitman \xe2\x95\x91\n\xe2\x95\x91 3 \xe2\x95\x91 Mark \xe2\x95\x91 Twain \xe2\x95\x91\n\xe2\x95\x91 ... \xe2\x95\x91 ... \xe2\x95\x91 ... \xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n\n-- Junction-table to keep track of books and their respective authors\nSELECT book_id, author_id FROM book_author;\n\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91 book_id \xe2\x95\x91 author_id \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 37 \xe2\x95\x91 1 \xe2\x95\x91\n\xe2\x95\x91 37 \xe2\x95\x91 2 \xe2\x95\x91\n\xe2\x95\x91 ... \xe2\x95\x91 ... \xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n\n-- Temporary table to store, once again, books …Run Code Online (Sandbox Code Playgroud) 我正在使用的DBMS是MySQL.
这是表格:
AUTHOR
author_id | first_name | last_name | patronymic
-----------------------------------------------
1 | John | Bush | NULL
2 | Sergey | Burov | Romanovich
3 | NULL | Filin | NULL
Run Code Online (Sandbox Code Playgroud)
如果我发出此查询:
SELECT author_id,
CONCAT(first_name, ' ', last_name, ' ', patronymic) AS full_name
FROM author;
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
author_id | full_name
-----------------------------------
1 | NULL
2 | Sergey Burov Romanovich
3 | NULL
Run Code Online (Sandbox Code Playgroud)
因此,从示例中可以看出,如果字段具有NULL值,则在连接过程中,整个事物将设置为NULL.请解释一下,如何让MySQL将NULL值转换为长度为0的字符串,或者只是使它不会连接NULL值?
谢谢大家.