小编Mik*_*ail的帖子

SQL和Delphi:用于从表创建树的递归机制

我正在使用的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)

mysql sql delphi recursion

12
推荐指数
1
解决办法
2760
查看次数

如何使用Delphi中的几个组件以编程方式创建表单

我正在使用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)

在此输入图像描述

我不知道如何将组件添加到以编程方式创建的表单中(不是在运行时,而是在源代码中).你能帮我写一些代码,为学生表格添加一个好的按钮,并设置标题和表格的高度和宽度(代码必须写在学生表格文件中)?

任何建议和示例将受到高度赞赏.谢谢.

delphi delphi-7

10
推荐指数
2
解决办法
3万
查看次数

SQL:3个表(book,author,book_author)

我的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)

输出中的作者行是与特定书籍相关的所有作者的串联.

mysql sql join concatenation

7
推荐指数
1
解决办法
1万
查看次数

如何在Delphi 7中创建两列(一个隐藏)的组合框?

如何创建一个TComboBox,其中有两列隐藏了其中一列,以便它可以保存id值以及其中的实际项目?然后如何以编程方式获得该id值?

delphi combobox delphi-7

7
推荐指数
2
解决办法
2万
查看次数

从函数返回动态数组

我正在使用 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)

arrays delphi delphi-7

5
推荐指数
1
解决办法
1万
查看次数

如何在TObject属性中存储Integer,然后向用户显示该值?

当然,这段代码不会编译.首先,我需要将一个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 delphi-7

5
推荐指数
1
解决办法
8047
查看次数

如何在Delphi中共享功能?

例如,我为我的表单编写了几个函数.现在,我需要另一种形式的完全相同的功能.那么,我如何在两种形式之间分享它们呢?如果可能的话,请提供一个简单的例子.

delphi delphi-7

3
推荐指数
1
解决办法
6664
查看次数

如何获取页面控件上的元素?

我正在使用Delphi 7.

假设我的表单上有页面控件.此页面控件有两个或三个选项卡.每个标签都有一些其他控件,如标签,编辑等.例如,如何获取代码中的编辑文本属性?

delphi delphi-7

2
推荐指数
1
解决办法
3781
查看次数

Delphi,ADO,MySQL:检查是否返回了空集

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)

mysql delphi ado

1
推荐指数
1
解决办法
1522
查看次数

如何在 MySQL 中将两个相同的表连接在一起

以下是我的数据库架构中的三个表:

\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)

mysql sql

1
推荐指数
1
解决办法
5961
查看次数

在连接期间,NULL值将所有内容都转换为NULL

我正在使用的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值?

谢谢大家.

mysql sql concatenation

-2
推荐指数
1
解决办法
166
查看次数

标签 统计

delphi ×8

delphi-7 ×6

mysql ×5

sql ×4

concatenation ×2

ado ×1

arrays ×1

combobox ×1

join ×1

recursion ×1