我在使用UNION查询的SQL Server 2005(Express版)时遇到了一些问题.
我有以下列的这个表订单:OrdNr,Prio现在我想通过2种方式按订单排序,第一种方式是紧急订单(所以prio 6或16)和第二种方式,其余订单按Prio排序.
所以这就是我的表格:
ORDNR PRIO
1 6
2 16
3 2
4 8
Run Code Online (Sandbox Code Playgroud)
我想要的是这个:
ORDNR PRIO
2 16
1 6
4 8
3 2
Run Code Online (Sandbox Code Playgroud)
我的查询尝试是这样的:
SELECT OrdNbr, Prio
FROM Orders
WHERE Prio IN (6,16)
ORDER BY Prio DESC
UNION
SELECT OrdNbr, Prio
FROM Orders
WHERE Prio NOT IN (6,16)
ORDER BY Prio DESC
Run Code Online (Sandbox Code Playgroud)
但我从SQL得到一个错误:UNION附近的语法错误
请帮忙:D
我有大量的对象都存储了文件名.所有文件名都在给定的基目录中(让我们称之为C:\BaseDir\).我现在正在考虑两种选择:
如果我正确理解Delphi字符串,第二种方法将需要更少的内存,因为基本路径字符串是共享的 - 假设我将相同的字符串字段传递给所有对象,如下所示:
TDataObject.Create (FBasePath, RelFileName);
Run Code Online (Sandbox Code Playgroud)
这个假设是真的吗?内存中只有一个基本路径的字符串实例吗?
如果有人知道处理这种情况的更好方法,也可以随意评论.
谢谢!
我正在连接到 FireBird 数据库,该数据库在线时工作正常。当服务器离线时,用户会收到最大执行时间已过错误。
因此我想用 try catch 包围连接语句并将超时设置为 10 秒。但我找不到合适的属性来这样做。默认的ATTR_TIMEOUT似乎不起作用。谁能告诉我 PDO 和 FireBird 是否可以实现这一点?
我一直在使用virtualstringtree一段时间了.我将它用于两个不同的东西,首先是作为选择的普通树,显示数据,其次是作为显示SQL语句输出的网格.
加载到树中的所有数据都来自数据库.对于树示例,我有一个parentId字段来区分层次结构,对于网格示例,我只使用带有每个树的自定义记录的SQL语句(这是唯一的).
我的问题与填充树的首选/最佳方式有关.我从VST文档中读到,您应该使用onInitNode事件和rootnodecount.但是我发现使用AddChild()方法非常相似,即使不鼓励它.
让我展示一些(简化的)示例:
Heirarchy
type PData = ^rData;
rData = packed record
ID : Integer;
ParentID : Integer;
Text : WideString;
end;
procedure Loadtree;
var Node : PVirtualNode;
Data : PData;
begin
Q1 := TQuery.Create(Self);
try
Q1.SQL.Add('SELECT * FROM Table');
Q1.Open;
Q1.Filter := 'ParentID = -1'; //to get the root nodes
Q1.Filtered := True;
while not Q1.Eof do
begin
Node := VST.AddChild(nil);
Data := VST.GetNodeData(Node);
Data.ID := Q1.Fields[fldID].AsInteger;
Data.ParentID := Q1.Fields[fldParentID].AsInteger;
Data.Text := Q1.Fields[fldText].AsString;
//now filter the query again …Run Code Online (Sandbox Code Playgroud) 我有喜欢发送击键它来控制其他应用程序CTRLS或CTRLSHIFTC或CTRLF.
我尝试了很多东西,但是我无法让它发挥作用.所以我试图在一个更简单的案例中做到这一点.
这成功发送Hey到记事本:
procedure TForm1.Button1Click(Sender: TObject);
var notepad, edit: HWND;
begin
notepad := FindWindow('notepad', nil);
edit := FindWindowEx(notepad, FindWindow('Edit', nil), nil, nil);
SendMessage(edit, WM_CHAR, dword('H'), 0);
SendMessage(edit, WM_CHAR, dword('e'), 0);
SendMessage(edit, WM_CHAR, dword('y'), 0);
end;
Run Code Online (Sandbox Code Playgroud)
这成功地将F5密钥发送到记事本,并且还可以F3弹出查找对话框.
notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_F5, 0);
PostMessage(notepad, WM_KEYUP, VK_F5, 0);
Run Code Online (Sandbox Code Playgroud)
但我不知道为什么使用SendMessage上面的例子不起作用.
我能提出的最好的事情就是这样,什么都不做.
notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(notepad, WM_KEYDOWN, VkKeyScan('F'), 0); …Run Code Online (Sandbox Code Playgroud) 在尝试部署我自己的GO应用程序时,git push heroku master我得到了错误Push rejected, failed to detect set buildpack heroku/go
因为错误非常具体,无法检测到buildpack,我尝试使用命令手动设置它heroku buildpacks:set heroku/go
.但是响应是! Thebuildpack heroku/go is already set on your app.
尽管这种推动尝试继续产生相同的错误 Push rejected, failed to detect set buildpack heroku/go
似乎错误信息让我误入歧途,还有什么可能是错的?在我的研究之后,我确保在app文件夹中有一个Procfile,我能够成功地按照事先部署Heroku GO示例的所有步骤进行操作.
我尝试在 VirtualStringTree 的所有特殊级别中使用背景颜色绘制高线文本。它看起来像是所有同一级别的选定节点。下面的代码不起作用。请有人给个方向。
procedure TMainForm.Tree1PaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);
var Data: PNodeData;LEVEL:INTEGER; tree1node,tree4Node: PVirtualNode;
begin
Data := Tree1.GetNodeData(Node);
Level := tree1.GetNodeLevel(node);
case column of
0:begin
if Level = 0 then BEGIN
TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
TargetCanvas.Font.Color :=CLyellow;
targetcanvas.Brush.Color :=clgreen;//don't work
targetcanvas.Brush.Style :=bssolid;
END;
if Level = 1 then BEGIN
TargetCanvas.Font.Color :=CLaqua;
targetcanvas.Brush.Color :=clgreen;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我想更新我的表,以便共享值(在相同列中)的行被标记为这样.
示例表定义:
CREATE TABLE `MyTable` (
`id` int NOT NULL ,
`a` varchar(10) NOT NULL ,
`b` varchar(10) NOT NULL ,
`state` tinyint NOT NULL ,
PRIMARY KEY (`id`)
) ;
Run Code Online (Sandbox Code Playgroud)
我想更新在同一列中共享值的每一行的"状态".因此,如果第一行具有"a = AAAA"而第二行具有相同的"a"值,则两者都应该更新.
我试过这个,但它太慢了(不比使用JDBC在Java中做得快):
declare mycursor cursor for select id, a, b from mytable;
open mycursor;
repeat
fetch mycursor into idid, aa, bb;
update mytable set state=1 where (a=aa, b=bb)
until done end repeat;
close mycursor;
Run Code Online (Sandbox Code Playgroud)
有什么想法让这种方式变得更好?多年来我没有做过任何体面的SQL.
使用Delphi 2010(Firebird [测试],MS Sql Server,Oracle [生产])
以下是我的SQL
SELECT p.script_no, MIN(p.start_Time) as startTime, MAX(p.end_Time) as endTime,
SUM(p.duration) as TotalDuration
FROM phase_times p
WHERE (p.script_no=:scriptNo) AND (Trunc(p.start_time) >= :beginDateRange) AND (Trunc(p.start_time) <= :endDateRange)
GROUP BY p.script_no
ParamByName('beginDateRange').AsDate:= Date - 30;
ParamByName('endDateRange').AsDate:= Date;
Run Code Online (Sandbox Code Playgroud)
我收到"字符串转换错误 - 10-25-2012",我不知道为什么,因为我的datetime字段在数据库中的"10/25/2012 9:20:49 AM"格式.
如果我将其更改为以下:ParamByName('beginDateRange').AsString:= formatDateTime('mm/dd/yyyy',Date - 30).....我收到错误"字符串转换错误 - 10/25/2012"
研究这个错误并没有为我提供新的途径,你有什么想法吗?
我正在将一个TrueType字体嵌入到pdf中,因此需要为它创建描述符字典.在必需的字段中是StemV,我没有找到ttf中存储此信息的位置.我想我在某个地方看到了一个暗示它是CVT程序的一部分,但没有具体的.
所以,我的问题是如何找出给定TrueType字体的StemV值.我想直接从ttf文件中读取这个值(而不是使用ie windows API),因为我想编写跨平台的解决方案.
更新:
Grep-ed LibreOffice 5.1.0.3源代码,当导出到pdf时,似乎FontDescriptor是在vcl/source/gdi/pdfwriter_impl.cxx方法中生成的PDFWriterImpl::emitFontDescriptor().在那里,第3888行是以下代码:
// According to PDF reference 1.4 StemV is required
// seems a tad strange to me, but well ...
aLine.append( "\n"
"/StemV 80\n" );
Run Code Online (Sandbox Code Playgroud)
现在的问题是为什么80,不是42吗?但严重的是,如果像LibreOffice这样的项目使用硬编码常量,则似乎表明该值未存储到字体文件中或读取它非常昂贵(即需要实现TrueType字体引擎来解释字体程序).
顺便说一句,对于那些想知道这个StemV是什么的人 - 在"PDF参考第六版"中,它被描述为"水平测量的字体中字形的主要垂直茎的厚度".
delphi ×5
firebird ×2
sql ×2
buildpack ×1
delphi-2010 ×1
delphi-7 ×1
delphi-xe ×1
git ×1
go ×1
heroku ×1
mysql ×1
pdf ×1
pdo ×1
performance ×1
php ×1
postmessage ×1
push ×1
sendmessage ×1
sql-order-by ×1
string ×1
timeout ×1
truetype ×1
union ×1
winapi ×1